如果只通过PHP访问json文件中的UTF-8字符,是否有任何好处?
以下是我测试的内容:
fwrite(fopen('fileA.json','w'), json_encode('аккредитовать'));
然后fileA.json
的内容由
"\u0413\u043b\u0430\u0432\u043d\u0430\u044f"
然而,当我用
存储它时fwrite(fopen('fileB.json','w'), json_encode('аккредитовать', JSON_UNESCAPED_UNICODE));
fileB.json
的内容由
"аккредитовать"
令我惊讶的是以下每个电话
echo json_decode(file_get_contents('fileA.json'));
echo json_decode(file_get_contents('fileB.json'));
echo json_decode(file_get_contents('fileA.json')), false, 512, JSON_UNESCAPED_UNICODE);
echo json_decode(file_get_contents('fileB.json')), false, 512, JSON_UNESCAPED_UNICODE);
给出相同的输出:
'аккредитовать'
因此,我得出结论,如果我想直接用编辑器打开和读取json文件,我只需要在json文件中保存UTF-8字符。如果我只计划用php显示/保存json文件的内容,那么我不需要保存未转义的内容,我可以使用
fwrite(fopen('fileA.json','w'), json_encode('аккредитовать'));
echo json_decode(file_get_contents('fileA.json'));`
这是正确的,还是我错过了重要的事情?
答案 0 :(得分:4)
现在使用JSON_UNESCAPED_UNICODE
JSON:
这是您唯一的权衡。一旦在JSON中有非ASCII字符,就需要确保以二进制安全的方式处理JSON;例如您不能简单地通过仅需要ASCII数据的通道发送它,或者如果通道具有编码感知(例如将其存储在数据库中),则需要关注特定编码。只要读者正确地处理编码(PHP在这里做,因为它不关心编码),只需将数据写入文件然后再次读取它就不会有任何问题。
JSON格式本身并不关心,"а"
和"\u0413"
代表完全相同的字符。
应该注意的是,转义的Unicode比UTF-8编码的文本占用更多的存储空间(6-12字节对2-4字节)。但在大多数情况下,这几乎不重要。
另请注意:JSON_UNESCAPED_UNICODE
不是json_decode
的有效标记;它在那里简直是多余的。