Jak*_*son 7 html mysql utf-8 iso-8859-1 character-encoding
我们有一堆手动输入的数据库数据.它们包含许多英镑(£)符号.原始用户从某处复制/粘贴英镑符号,不知道在哪里(我不确定它是否重要......).
无论如何,当在PHP页面上打印出数据时,英镑符号显示为替换字符.页面中有<meta charset="utf-8"/>.在浏览器中,如果将编码更改为ISO-8859-1,则正确显示井号.
经过一番挖掘,我得出结论,原始数据录入人员将ISO-8859-1编码的英镑符号复制/粘贴到数据库中.因此,除非使用页面呈现ISO-8859-1,否则它将无法正确显示.
以下是Chrome的标题信息:
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
Run Code Online (Sandbox Code Playgroud)
MySQL表也说它使用的latin1_swedish_ci是默认值.
那么我该如何解决这个问题呢?我不太了解字符编码的工作方式以及将字符从一个地方复制/粘贴到另一个地方时会发生什么.
我试着去这个页面:
http://www.fileformat.info/info/unicode/char/a3/browsertest.htm
并复制英镑符号并将其粘贴到数据库中,认为可以修复它,但它似乎没有...我如何使数据库中的英镑符号成为UTF-8磅符号而不是ISO- 8859-1?
复制原始英镑符号无关紧要.它在数据库中存储的编码方式无关紧要.数据库在字符级别上工作,这意味着如果您要求它存储£字符,它会存储£字符; 究竟是如何在幕后发生的,以及它用来做什么编码是一个无关紧要的实现细节.
你缺少的是有一个连接编码.当您连接到数据库时,您将使用某个字符集隐式或显式地与它进行对话.这意味着您要发送到数据库的任何字节都应该代表该编码中的字符(因此数据库知道它应该接收哪些字符),并且您从数据库接收的任何文本数据都将以该编码进行编码(因此您知道如何你应该对待结果).该连接编码的默认值通常是Latin-1字符集(也称为ISO-8859-1).因此,当您从数据库收到£符号时,它会将其即时转换为Latin-1,无论数据库中存储的是什么编码.因此,您正在接收以Latin-1编码的£符号并将其按原样输出到您的页面中,但您指定浏览器将该页面解释为UTF-8.这当然会导致误解的角色.
您可以通过各种方式更改连接默认值,可以是MySQL配置,使用客户端库中的某些方法(您未指定),也可以SET NAMES utf8;在连接到数据库后发出查询.
| 归档时间: |
|
| 查看次数: |
7737 次 |
| 最近记录: |