本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一、解决方案
入库前存在汉字编码问题,有两种解决办法,自己根据实际项目需要进行选择
1、json_encode的时候加入参数JSON_UNESCAPED_UNICODE,让汉字可以直接入库而不去unicode转码
2、json_encode外包裹转义函数,让入库的json字符串不会存在编码问题
二、demo演示
<?php
$a = '中文';
echo PHP_EOL;
echo(json_encode($a));echo PHP_EOL;
echo (json_encode($a, JSON_UNESCAPED_UNICODE)); echo PHP_EOL; //方案1,直接汉字入库
echo(addslashes(json_encode($a))); echo PHP_EOL; //方案2、json串编码转义后入库
echo(addslashes(json_encode($a, JSON_UNESCAPED_UNICODE))); echo PHP_EOL; //双管齐下
三、执行结果
"\u4e2d\u6587"
"中文"
"\u4e2d\u6587"
"中文"
四、常见的json_decode问题
在使用json_decode函数想把json串转化为数组的时候,出现了null,当时还以为是因为json对字符串的长度有限制,还以为是因为两边少了引号,经过多次处理,发现都没有效果, 我这里把收集到的都总结了,json_decode要求的字符串比较严格
1. 使用UTF-8编码
2. 不能在最后元素有逗号
3. 不能使用单引号
4. 不能有\r,\t,如果有请替换
**解决方案**
**一、bom头问题**
json字符串中的BOM头是不可见字符,某些编辑器默认会加上BOM头。\
<?php $info = json_decode(trim($info,chr(239).chr(187).chr(191)),true);\
**二、语法错误**
使用 json_last_error() 函数打印一下错误,页面显示4,也就是语法错误。\
<?php echo $errorinfo = json_last_error(); //输出4 语法错误\
出现这个问题是因为在 json 字符串中反斜杠被转义,只需要用 htmlspecialchars_decode() 函数处理一下 $content 即可:\
$info= htmlspecialchars_decode($info);\
**三、其他破坏json字符串的字符**\
<?php $info= preg_replace('/[\x00-\x1F\x80-\x9F]/u', '', trim($info));\
作者
自我介绍 :梦在张导,魔都楼主,码农程序猿
分享要求 : 以教为学,及时反馈,学以致用
通俗一点 :说人话,尽人事,要闭环!