我的数据库使用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。
我做错了吗?
答案 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');