DB是iso-8859-1,使用utf8_encode字符转换错误

时间:2015-07-24 08:49:07

标签: php ajax database unicode character-encoding

我的数据库使用ISO-8859-1,我通过sqlsrv_query获取数据。有一些字符如,在获取数据后我使用utf8_encode()函数。

然后我使用以下设置将数据发送回Ajax请求:

header('Content-Type: application/json');
echo json_encode($Data);

我通过responseJSON捕获数据,一切正常,但这里有一个错误编码的例子:

{"Products":{"1":{"ProductID":"1","Name":"Testproduct\u0084Foobar\u0093"}}}

\u0093应该是,但它不是,它的Unicode应该是\u201C,或者甚至不会拆分为Unicode。

我做错了吗?

1 个答案:

答案 0 :(得分:1)

ISO 8859-1不包括弯曲引号字符,例如;可以seen on Wikipedia,字符0x93未定义,保留用作控制字符。

但是,当人们指定ISO 8859-1时,它们实际上通常意味着Windows codepage 1252,它将此保留块替换为其他字符,包括弯曲引号。在Windows-1252中,0x93确实是,因此可以合理地假设这是您的数据库实际配置的内容。

由于utf8_encode仅处理ISO 8859-1,因此您需要使用不同的函数转换为Unicode编码。有两个这样的函数与标准的PHP发行版捆绑在一起,来自不同的扩展:

  • iconv - 类似于$utf8_string = iconv('Windows-1252', 'UTF-8', $db_string);
  • mb_convert_encoding - 类似于$utf8_string = mb_convert_encoding($db_string, 'UTF-8', 'Windows-1252');