Php fopen 或 fwrite 使用 unicode 创建文本

Php fopen or fwrite creates text with unicode

我正在尝试使用 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"}

来自documentation

Encode multibyte Unicode characters literally (default is to escape as \uXXXX). Available since PHP 5.4.0.