我正在尝试使用fopen和fwrite编写一个文件。我有一个打印时显示正常的数组。
例如,我可以看到"Délai de livraison"
被打印出来。
创建文件后,它显示为:"D\u00e9lai de livraison"
。如果我理解的话,“\ u00e9”是unicode。
我尝试添加“BOM”并将其写入文件的开头,但没有任何变化。
//Write $newarray to a file
$filename = 'translations_fr.json';
//create json file
$file = base_path('/imports/') . $filename;
$fp = fopen($file, 'w');
//BOM
fwrite($fp, "\xEF\xBB\xBF");
fwrite($fp, json_encode($newarray));
fclose($fp);
我的IDE是Netbeans,默认配置为UTF-8。我试过utf8_encode(),但没有运气。我能做什么?
这不是BOM或fwrite()
问题。默认情况下,json_encode()
会将所有多字节字符转换为unicode格式。
但你可以使用JSON_UNESCAPED_UNICODE
选项:
echo json_encode(['test'=>'délai']);
echo json_encode(['test'=>'délai'], JSON_UNESCAPED_UNICODE);
产出:
{"test":"d\u00e9lai"}
{"test":"délai"}
从字面上对多字节Unicode字符进行编码(默认为以\ uXXXX转义)。从PHP 5.4.0开始提供。