如何将unicode字符转换为反斜杠值 - 以解决json_encode问题

时间:2012-01-23 23:21:40

标签: php json unicode

我正在尝试从我的数据库中提取已存储为unicode值的运动员。当调用json_encode时,它会以我所获得的格式命中unicode字符时放弃:

$values = array('a'=>'BERDYCH, Tomáš','b'=>'FEDERER, Roger');
echo json_encode($values);

结果是

{“a”:“BERDYCH,Tom”,“b”:“FEDERER,Roger”}

你可以看到'Tom'被切断,因为它达到了unicode字符。

我理解json_encode只处理\ uxxxx样式字符,但问题是我的数据库中有成千上万的运动竞争对手已经包含unicode存储值,所以不知何故我需要将á类型字符转换为\ uxxxx而不对我的数据源进行更新。< / p>

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

json_encode()在获取无效UTF-8字符的字符时执行此操作。

如果从数据库中提取数据,最可能的原因是您的连接不是UTF-8编码的,并且您从查询中获得了ISO-8859-1数据。

显示数据库代码以获取有关如何更改此内容的建议。

  

我知道json_encode只处理\ uxxxx样式字符

事实并非如此。 json_encode() 输出以这种方式编码的Unicode字符,但它不会在传入数据中期望

答案 1 :(得分:1)

您的源代码和/或来自数据库的数据未以UTF-8编码。我猜它是专门的ISO-8859编码之一,但我不确定。保存源代码时,请确保将其保存为UTF-8。从数据库获取数据时,请确保将连接设置为utf8。

请参阅What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With TextHandling Unicode Front To Back In A Web App

答案 2 :(得分:0)

要确保它们是UTF8,请对数组中的所有值进行编码

$values = array_map('utf8_encode', $values);

如果这无助于使用mb_detect_encoding()和mb_convert_encoding()将特定于语言的编码更改为UTF8。

答案 3 :(得分:0)

这是一个c#问题,但请查看Converting Unicode strings to escaped ascii string以了解执行此操作的实现。