Php 字符编码问题UTF-8和ISO-8859-1
我有一个web应用程序,在正确显示日文/中文字符时遇到问题。当我将这些字符硬编码到HTML文档中时,我可以正确地显示它们 字符,例如:Php 字符编码问题UTF-8和ISO-8859-1,php,utf-8,iconv,Php,Utf 8,Iconv,我有一个web应用程序,在正确显示日文/中文字符时遇到问题。当我将这些字符硬编码到HTML文档中时,我可以正确地显示它们 字符,例如: アイヌの工芸 : ペンシルバニア大学考古学人類学博物館ヒラーコレクション 但当我从这个专有数据库中取出它们时,它就变成了垃圾: ã¢ã¤ãã®å·¥è¸ : ãã³ã·ã«ããã¢å¤§å¦èå¤å¦äººé¡å¦åç©é¤¨ãã©ã¼ã³ã¬ã¯ã·ã§ã³ 现在我有了用utf-8编码的html文档 <meta http-equiv="cont
アイヌの工芸 : ペンシルバニア大学考古学人類学博物館ヒラーコレクション
但当我从这个专有数据库中取出它们时,它就变成了垃圾:
ã¢ã¤ãã®å·¥è¸ : ãã³ã·ã«ããã¢å¤§å¦èå¤å¦äººé¡å¦åç©é¤¨ãã©ã¼ã³ã¬ã¯ã·ã§ã³
现在我有了用utf-8编码的html文档
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
看起来垃圾字符串是UTF-8,当我将字符串转换为ISO-8859-1时,它会正确显示字符。这对我来说毫无意义
所以我对我的问题有一个答案,但我不知道为什么它会起作用。我认为用UTF-8编码应该可以解决这种问题。我正在使用Verdana,但尝试了几种其他字体,但没有成功。奇怪的是,我可以毫无问题地将字符硬编码到html页面中,它们显示得很好。但是,当从数据库中获取相同的数据时,它会显示为垃圾邮件,而无需将编码更改为ISO-8859-1
有人有什么见解吗?除了对从数据库中获取的每一条数据都这样做之外,还有没有一种方法可以在单独的页面级别上进行更改?我还尝试将编码更改为
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
而且数据库中的字符仍然无法正确显示。答案是数据库中的数据错误。可能发生的情况是,您对已经在UTF-8中的数据进行了ISO-8859-1->UTF-8转换。因此,进行UTF-8->ISO-8859-1转换将返回原始UTF-8数据 确保您没有对UTF-8数据调用
utf8\u encode
(它执行ISO-8859-1->UTF-8转换)
由于每个UTF-8字符串也是一个有效的ISO-8859-1字符串(不完全是,但它通常是扩展的,所以情况就是这样),所以在UTF-8数据上进行ISO-8859-1->UTF-8转换时没有错误。只是猜测,但当数据库是utf8,html文档是utf8时,最有可能的问题是数据库连接,至少在我使用MySQL的经验中是这样 例如对于MySQL(旧/常规版本),打开数据库后需要设置字符集:
mysql_set_charset('utf8');
对于PDO/MySQL,它将类似于:
$db->exec('SET CHARACTER SET utf8');
这可能是因为PHP不以本机方式处理UTF-8: 字符串是一系列字符,其中一个字符与另一个字符相同 字节。这意味着PHP只支持256个字符集,因此 不提供本机Unicode支持 资料来源: 因此,当从数据库接收UTF-8编码数据时,您需要:
- 将数据转换为单字节编码字符串以获得本机支持(使用或),但您可能会丢失字符(在您的情况下会丢失很多…)
- 或者使用PHP提供的一系列函数来处理数据
$db->exec('SET CHARACTER SET utf8');