现在,以我自己的观点,我已经尝试了有关此编码问题的所有方法,查看了许多已回答的问题,但对我没有任何帮助,所以我开始了。
我有一个带Users
表的 MySQL 数据库。此表有一个“名字”列,排序规则设置为utf8_general_ci
(所有 varchar 列都是)。然后我插入了一行,其中名字列设置为“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"。然后我尝试检查我的变量从数据库中出来时的编码是什么,如下所示:
header('Content-Type: text/plain; charset=utf-8');
print(mb_detect_encoding($userArr['firstname']));
但这又回来了UTF-8
。
因此,希望您可以看到,我已经尝试了所有方法,但我仍然不知道为什么 myjson_encode
将 "ø" 字符更改为"\u00f8"。请帮忙,我不想制作自己的 json_encode 方法。