我正在尝试从我的数据库中提取已存储为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>
有什么想法吗?
答案 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 Text和Handling 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以了解执行此操作的实现。