我的编码有问题......
一切都是UTF-8配置,即我的数据库(postgres)和我的php文件。
执行此脚本时:
$eleves = $serviceManager->getAll('Eleve');
echo "<pre>";
print_r($eleves);
echo "</pre>";
我明白了:
[0] => Model_Eleve Object
(
[idEleve:Model_Eleve:private] => 28206
[numeroscolaire:Model_Eleve:private] => ABE290999JOËL
[nom:Model_Eleve:private] => Abedinpour
[prenom:Model_Eleve:private] => Joël
[dateNaissance:Model_Eleve:private] => 1999-09-29
[sexe:Model_Eleve:private] => masculin
[statusCourant:Model_Eleve:private] =>
[statusSuivant:Model_Eleve:private] =>
[adresses:Model_Eleve:private] => Array
(
[0] => Model_Adresse Object
(
[idAdresse:Model_Adresse:private] => 6176
[rue:Model_Adresse:private] => La Delèze
[numero:Model_Adresse:private] => 37
[codePostal:Model_Adresse:private] => 1164
[localite:Model_Adresse:private] => Buchillon
[emplacement:Model_Adresse:private] =>
)
)
这里一切都好。但如果我想要JSON:
$eleves = $serviceManager->getAll('Eleve');
echo "<pre>";
echo json_encode($eleves, JSON_PRETTY_PRINT);
echo "</pre>";
我明白了:
{
"nom": "Abedinpour",
"prenom": "Jo\u00ebl",
"adresse": [
{
"rue": "La Del\u00e8ze",
"numero": "37",
"localite": "Buchillon"
}
],
"classe": [
"7VSG\/1"
]
},
我不知道为什么它适用于数组并且不适用于json_encode ...我试图改变utf8中的所有内容(使用htmlentities)但是它告诉我他不能转换'ASCII'
当我尝试在终端中使用此命令显示我的文件的编码时:
file -I myfile.php
它返回:
myfile.php: text/x-php; charset=us-ascii
但我无法将其转换为utf8:
iconv -f us-ascii -t utf-8 myfile.php > myfile2.php
file -I myfile2.php
myfile2.php: text/x-php; charset=us-ascii
提前感谢您的帮助
答案 0 :(得分:3)
这是编码非ASCII字符的完全有效的JSON方式。这里没有错。任何正确解码它的客户端都将检索正确的字符。如果您更喜欢实际的UTF-8字符并运行PHP 5.4+,请使用JSON_UNESCAPED_UNICODE
的{{1}}标记。