json_encode对中文和引号的处理差异研究详解编程语言

json_encode()
1.默认就是把所有 ASCII 可显示字符以外的统统转义为 Unicode
如果把那些字符转义为 Unicode 之后,无论文件编码是否一致,都不会出现乱码,因此中文转成Unicode编码是有好处的

2.对单引号和双引号的处理是有差异的,并且受数组键值包裹字符串的引号影响

3.json_encode(array(),JSON_FORCE_OBJECT));输出空的对象
json_encode(new stdClass());另一种方式
JSON_UNESCAPED_SLASHES 不要转义 /,例如很多url被转义
JSON_UNESCAPED_UNICODE 汉字不要编码成Unicode 字符

<?php 
 
var_dump(json_encode(array())); 
var_dump(json_encode(array(),JSON_FORCE_OBJECT)); 
var_dump(json_encode(new stdClass())); 
var_dump(json_encode(array('name'=>'陶士涵','point'=>100,'test'=>'/aaa /" /'  / aa 
'),JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES)); 
var_dump(json_encode(array("name"=>"陶士涵","point"=>100,"test"=>"/aaa /" /' ' / aa 
"),JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES)); 
/** 
输出 
string(2) "[]" 
string(2) "{}" 
string(2) "{}" 
string(64) "{"name":"陶士涵","point":100,"test":"/aaa ///" '  // aa/r/n"}" 
string(65) "{"name":"陶士涵","point":100,"test":"/aaa /" //' ' // aa/r/n"}"  

重点:

1.起到转义效果的反斜杠不会有变化,没起到转义效果的反斜杠会自动再被转义

2.数组外包裹内容的单引号不会影响输出,输出后都是包裹字符串的都是双引号,但是会影响第一点

  

4.出现错误时的处理,json_decode失败的问题:

var_dump(json_last_error());//打印出错信息
var_dump($b);
0 JSON_ERROR_NONE
1 JSON_ERROR_DEPTH
2 JSON_ERROR_STATE_MISMATCH
3 JSON_ERROR_CTRL_CHAR
4 JSON_ERROR_SYNTAX
5 JSON_ERROR_UTF8
6 JSON_ERROR_RECURSION
7 JSON_ERROR_INF_OR_NAN
8 JSON_ERROR_UNSUPPORTED_TYPE

当编码有问题时这样处理
$a=iconv(“gbk”, “utf-8//IGNORE”, $a);
$b=json_decode($a,true);

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/12569.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论