Php fopen或fwrite使用unicode创建文本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Php fopen或fwrite使用unicode创建文本相关的知识,希望对你有一定的参考价值。
我正在尝试使用fopen和fwrite编写一个文件。我有一个打印时显示正常的数组。
例如,我可以看到"Délai de livraison"
被打印出来。
创建文件后,它显示为:"Du00e9lai 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, "xEFxBBxBF");
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":"du00e9lai"}
{"test":"délai"}
从字面上对多字节Unicode字符进行编码(默认为以 uXXXX转义)。从php 5.4.0开始提供。
以上是关于Php fopen或fwrite使用unicode创建文本的主要内容,如果未能解决你的问题,请参考以下文章
向 fwrite / fopen / fclose 进程添加内容头