Php 如何将unicode字符转换为反斜杠值-以解决json_编码问题
我正在尝试从我的数据库中提取已存储为unicode值的体育运动员。当调用json_encode时,当它遇到我得到的格式中的unicode字符时,它会放弃:Php 如何将unicode字符转换为反斜杠值-以解决json_编码问题,php,json,unicode,Php,Json,Unicode,我正在尝试从我的数据库中提取已存储为unicode值的体育运动员。当调用json_encode时,当它遇到我得到的格式中的unicode字符时,它会放弃: $values = array('a'=>'BERDYCH, Tomáš','b'=>'FEDERER, Roger'); echo json_encode($values); 结果是 {“a”:“伯蒂奇,汤姆”,“b”:“费德勒,罗杰”} 您可以看到“Tom”被截断,因为它达到了unicode字符 我知道json_encode
$values = array('a'=>'BERDYCH, Tomáš','b'=>'FEDERER, Roger');
echo json_encode($values);
结果是
{“a”:“伯蒂奇,汤姆”,“b”:“费德勒,罗杰”}
您可以看到“Tom”被截断,因为它达到了unicode字符
我知道json_encode只处理\uxxx样式的字符,但问题是我的数千名体育比赛选手的数据库已经包含unicode存储值,因此我需要在不更新数据源的情况下将átype字符转换为\uxxx
有什么想法吗?要确保它们是UTF8,请对数组中的所有值进行编码
$values = array_map('utf8_encode', $values);
如果这没有帮助,请使用mb_detect_encoding()和mb_convert_encoding()将特定于语言的编码更改为UTF8。json_encode()
在获取无效UTF-8字符时执行此操作
如果您正在从数据库获取数据,最可能的原因是您的连接未进行UTF-8编码,并且您正在从查询中获取ISO-8859-1数据
显示您的数据库代码以获得如何更改的建议
我了解json_encode仅处理\uxxx样式的字符
事实并非如此
json#u encode()
输出以这种方式编码的Unicode字符,但它不希望它们出现在传入的数据中。这是一个c#问题,但请看一看实现方法。您的源代码和/或来自数据库的数据没有以UTF-8编码。我猜这是一种专门的ISO-8859编码,但我不确定。保存源代码时,请确保它保存在UTF-8中。从数据库获取数据时,请确保将连接设置为utf8
请参阅和。
json\u encode
可以很好地处理Unicode,至少应该是这样。你确定你的文本是UTF-8编码的吗?向我们展示文本的bin2hex
;给我424552445943482C20546F6DE19A我需要设置一个环境变量还是什么?上述代码是否适用于您,并为您返回Tomas Berdych全名的json编码版本?请不要建议utf8\u encode
,除非说明源代码需要使用拉丁文1。否则utf8\u编码就没用了!在编码方面,“尝试”或“猜测”并不是解决方案。知道你在处理什么编码!更有可能有更好的解决方案:从根本上解决问题。(编辑:deceze击败了我!)谢谢Pekka,但是上面的两行代码导致了同样的问题,即使没有使用数据库?@Luc您的源文件是UTF-8编码的吗?(通常在IDE的“另存为”对话框中)啊,我看到了Pekka-谢谢!1) 我已将我的PHP保存为UFT-8编码2)我正在投资更改我的列、数据库表和sql默认设置,以将默认值编码为utf-8。感谢deceze,这里有一些非常有用的链接。从现在开始,我要做的第一件事就是从一开始就建立utf-8。