PHP:什么时候应该将未转义的UTF-8保存到json文件中?

时间:2017-10-25 10:55:19

标签: php json utf-8

如果只通过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'));`

这是正确的,还是我错过了重要的事情?

1 个答案:

答案 0 :(得分:4)

现在使用JSON_UNESCAPED_UNICODE JSON:

  1. 更具人性化
  2. 不是ASCII安全的
  3. 这是您唯一的权衡。一旦在JSON中有非ASCII字符,就需要确保以二进制安全的方式处理JSON;例如您不能简单地通过仅需要ASCII数据的通道发送它,或者如果通道具有编码感知(例如将其存储在数据库中),则需要关注特定编码。只要读者正确地处理编码(PHP在这里做,因为它不关心编码),只需将数据写入文件然后再次读取它就不会有任何问题。

    JSON格式本身并不关心,"а""\u0413"代表完全相同的字符。

    应该注意的是,转义的Unicode比UTF-8编码的文本占用更多的存储空间(6-12字节对2-4字节)。但在大多数情况下,这几乎不重要。

    另请注意:JSON_UNESCAPED_UNICODE不是json_decode的有效标记;它在那里简直是多余的。