gpt4 book ai didi

mysql - HTML - 来自数据库的英镑符号显示为?即使使用 charset=UTF-8

转载 作者:太空狗 更新时间:2023-10-29 14:15:20 24 4
gpt4 key购买 nike

我们有一堆有人手动输入的数据库数据。它们包含很多英镑 (£) 符号。原始用户从某处复制/粘贴井号,但不确定在哪里(我不确定它是否重要...)。

无论如何,当在 PHP 页面上打印数据时,井号显示为 replacement character .该页面有<meta charset="utf-8"/>在里面。在浏览器中,如果将编码更改为 ISO-8859-1 , 然后井号会正确显示。

经过一些挖掘,我得出的结论是原始数据输入人员复制/粘贴了一个 ISO-8859-1编码的井号登录到数据库中。所以除非页面是使用 ISO-8859-1 呈现的, 它不会正确显示。

这是来自 Chrome 的 header 信息:

Request URL:http://www.mysite.com/test.php
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:X-Mapping-goahf....
Host:www.mysite.com
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2
Response Headersview source
Connection:Keep-Alive
Content-Type:text/html; charset=UTF-8
Date:Wed, 07 Dec 2011 22:38:14 GMT
Server:Apache/2.2
Transfer-Encoding:chunked

MySQL 表还说它使用 latin1_swedish_ci这是默认值。

那么我该如何解决这个问题呢?我不太了解字符编码的工作原理以及将字符从一个地方复制/粘贴到另一个地方时会发生什么。

我试着去这个页面:

http://www.fileformat.info/info/unicode/char/a3/browsertest.htm

然后复制英镑符号并将其粘贴到数据库中,以为可以修复它,但它似乎并没有...如何将数据库中的英镑符号改为 UTF-8 英镑符号ISO-8859-1 的?

最佳答案

原始井号是从哪里复制的并不重要。它甚至以何种编码存储在数据库中都无关紧要。数据库在字符级别上工作,这意味着如果您要求它存储 £ 字符,它会存储 £ 字符;这到底是如何在幕后发生的以及它使用什么编码来做到这一点是无关紧要的实现细节。

您缺少的是连接编码。当您连接到数据库时,您是在使用特定字符集隐式或显式地与它对话。这意味着您发送到数据库的任何 bytes 都应该代表该编码中的字符(因此数据库知道它应该接收什么字符)并且您从数据库接收的任何文本数据都将被编码为该编码(因此知道您应该如何处理结果)。该连接编码的默认值通常是 Latin-1 字符集(又名 ISO-8859-1)。因此,当您从数据库中收到 £ 符号时,它会即时将其转换为 Latin-1,无论它以何种编码存储在数据库中。因此,您收到以 Latin-1 编码的 £ 符号并将其按原样输出到您的页面中,但您指定浏览器将页面解释为 UTF-8。这当然会导致对字符的误解。

您可以通过多种方式更改连接默认值,可以在 MySQL 配置中使用客户端库中的某些方法(您未指定)或通过发出查询 SET NAMES utf8;连接到数据库后。

关于mysql - HTML - 来自数据库的英镑符号显示为?即使使用 charset=UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8423959/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com