json_encode后存入数据库中发现json_decode是空改如何处理?

563 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一、解决方案

入库前存在汉字编码问题,有两种解决办法,自己根据实际项目需要进行选择

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));\



作者

自我介绍 :梦在张导,魔都楼主,码农程序猿

分享要求 : 以教为学,及时反馈,学以致用

通俗一点 :说人话,尽人事,要闭环!