现在我,在我自己的观点中,已经尝试了关于这个编码问题的一切,看了很多回答的问题,但没有任何对我有用,所以我走了。
我有一个带有Users
表的MySQL数据库。此表有一个“firstname”列,其排序规则设置为utf8_general_ci
(所有varchar列都是)。然后我插入了一行,其中firstname-column设置为“Løw”,带有斯堪的纳维亚特殊字符“ø”。
我现在使用php-ActiveRecord库,其中连接字符串为“; charset = utf8”,以检索行,然后将用户输出为json,如下所示:
$user = User::find($ID);
$userArr = $user->to_array();
header('Content-Type: application/json; charset=utf-8');
print(json_encode($userArr));
现在有线的东西开始了。第一个名称现在不是MySQL数据库中显示的“Løw”,而是“L \ u00f8w”。然后我试着看看是否也是没有json_encode
函数的情况,如下所示:
$user = User::find($ID);
$userArr = $user->to_array();
header('Content-Type: text/plain; charset=utf-8');
print_r($userArr);
但这里的输出是正确的,名字是“Løw”。然后我尝试将数组中的字段编码为utf-8
,因为每个人都告诉我字符串是utf-8
它是否应该起作用,如下所示:
$return[] = array_map('utf8_encode', $userArr);
print_r(json_encode($return));
但是这给了我“L \ u00c3 \ u00b8w”,所以这没用。然后我尝试了,因为我没想到utf8_decode它:
$return[] = array_map('utf8_decode', $userArr);
print_r(json_encode($return));
但是这使得字符串返回“null”。然后我尝试检查我们的vars在数据库出来时的编码方式,如下所示:
header('Content-Type: text/plain; charset=utf-8');
print(mb_detect_encoding($userArr['firstname']));
但这返回了UTF-8
。
所以,希望你能看到,我已经尝试过所有事情,但我仍然不知道为什么我的json_encode
将“ø”字符改为“\ u00f8”。请帮助,我不想制作自己的json_encode方法。
答案 0 :(得分:1)
好的找到答案很快,但让其他斯堪的纳维亚人知道,因为我不能找到关于这个主题的任何内容。
我通过在json_encode方法中添加以下内容来解决问题:
print(json_encode($userArr,JSON_UNESCAPED_UNICODE));
这告诉方法不要转义unicode字符(我认为)或正如PHP文档中所述:
JSON_UNESCAPED_UNICODE(整数)
从字面上对多字节Unicode字符进行编码(默认为转义为 为\ uXXXX)。从PHP 5.4.0开始提供。