我正在尝试转换从MySQL数据库中获取的ISO8859-1字符串,并使用php将其转换为UTF-8。但是,当我使用utf8_encode函数时,它会从字符串中删除几乎所有的撇号(异常似乎在html字段中)。
由于
答案 0 :(得分: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相关联。
答案 1 :(得分:0)