utf-8中的PHP编码和json_编码

utf-8中的PHP编码和json_编码,php,encoding,utf-8,Php,Encoding,Utf 8,我有这个字符Œ,它在数据库中以iso-8859-1(拉丁语和瑞典语)编码。我想将其转换为utf-8以用于json\u encode $name = 'CŒUR'; //in iso-8859-1 $data = array('name' => utf8_encode($name)); echo json_encode($data); 显示: { "name":"C\u008cUR" } 预期: { "name":"C\u0152UR" } 然后我使用AJAX获得响

我有这个字符
Œ
,它在数据库中以
iso-8859-1
(拉丁语和瑞典语)编码。我想将其转换为
utf-8
以用于
json\u encode

$name = 'CŒUR'; //in iso-8859-1

$data = array('name' => utf8_encode($name));

echo json_encode($data);
显示:

{
    "name":"C\u008cUR"
}
预期:

{
    "name":"C\u0152UR"
}
然后我使用AJAX获得响应,将其转换为json对象,然后在页面上显示它

检查

第二个是预期结果,您可以在控制台中进行检查

测试链路


问题:我想将其转换为
\u0152
,以便在我的页面中正确显示,但我不知道为什么会将其转换为
\u008c

如果我理解正确,您似乎从数据库中接收了错误字符集的数据?

那么你的问题是什么?我无法正确转换为\u0152。ISO-8859-1中不存在。这是一个Windows-1252字符。此外,latin1 for MySQL不是ISO-8859-1,而是Windows-1252。将
utf8\u encode($name)
替换为
iconv('CP1252','UTF-8',$name)
,或者,更好的方法是,让MySQL直接返回以utf8编码的结果集,而不是拉丁文1(集合名等效于PDO,对于PDO,它是从PHP 5.3.6开始的DSN的名为charset的参数)。但是在我的数据库中,在phpmyadmin中,它正确显示
Œ
,如果我直接执行
echo“Œ”
,它正确显示在我的网页中,在iso8859-1字符集中确实,从MYSQL帮助中转换编码我使用
MYSQL_集_字符集('utf8')
返回UTF-8数据,它解决了我的问题,谢谢。似乎使用PHP编码或解码转换它无法工作