php ActiveRecord和json_encodeæøå编码问题

时间:2013-06-13 13:37:25

标签: php encoding special-characters json phpactiverecord

现在我,在我自己的观点中,已经尝试了关于这个编码问题的一切,看了很多回答的问题,但没有任何对我有用,所以我走了。

我有一个带有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方法。

1 个答案:

答案 0 :(得分:1)

好的找到答案很快,但让其他斯堪的纳维亚人知道,因为我不能找到关于这个主题的任何内容。

我通过在json_encode方法中添加以下内容来解决问题:

print(json_encode($userArr,JSON_UNESCAPED_UNICODE));

这告诉方法不要转义unicode字符(我认为)或正如PHP文档中所述:

  

JSON_UNESCAPED_UNICODE(整数)

     

从字面上对多字节Unicode字符进行编码(默认为转义为   为\ uXXXX)。从PHP 5.4.0开始提供。