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

时间:2010-09-12 01:09:54

标签: php mysql utf-8 character-encoding apostrophe

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

由于

2 个答案:

答案 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)

一种可能性是使用Iconv。我以前用过它,非常好。

http://php.net/manual/en/function.iconv.php

它有一个TRANSLIT选项,可以逼近角色。