在PHP中将ISO8859-1转换为UTF-8的问题

use*_*359 2 php mysql utf-8 character-encoding apostrophe

我试图转换从MySQL数据库中取出的ISO8859-1字符串,并使用php将其转换为UTF-8.但是,当我使用utf8_encode函数时,它会从字符串中删除几乎所有的撇号(异常似乎在html字段中).

谢谢

bob*_*nce 9

您的"ISO-8859-1"内容可能实际上不是ISO-8859-1.

当你说Content-Type: text/html; charset=iso-8859-1,由于令人讨厌的历史原因,浏览器实际上并没有使用ISO-8859-1.他们真的使用Windows代码页1252(西欧),这与ISO-8859-1非常相似,但不一样.

特别是,0x80-0x9F范围内的字节表示ISO-8859-1中不可见且很少使用的控制代码.但是cp1252在这个范围内增加了一些排版细节和其他扩展,包括"智能引号".当您在MS Word中编写撇号时,它会将其更改为单个向左的智能引号,因此在Word和其他Office应用程序中对原始类型的文本进行编码时会出现问题.

要将cp1252转换为UTF-8,您必须使用iconv('cp1252', 'utf-8', $somestring)而不是将utf8_encode其与"真实"ISO-8859-1相关联.

  • @StaxMan:在网络的早期,你是对的,有不兼容的行为.但是今天,当指定ISO-8859-1时,当前的浏览器都使用cp1252.HTML5 [standardises](http://dev.w3.org/html5/spec/Overview.html#character-encodings-0)这个和其他讨厌的编码替换.令人遗憾的是,这种丑陋的行为已成为标准,并且没有办法指定"ISO-8859-1,我的意思是它!"......但是我们都在使用UTF-8,所以谁在乎,对吧?:-) (2认同)