中文 json_encode 插入到mysql 问题

我先抛出问题

一个成员信息列表,用户名显示是这样的 u8fd9u662fu4e2du6587
可以看得出来,本身应该是这样的 \u8fd9\u662f\u4e2d\u6587 ==》 这是中文

我去查询,发现数据库中本身存的就是如此, 类似如下。
中文 json_encode 插入到mysql 问题

问题原因

$name = ["这是中文", "你好啊", "好尼玛"];
$name = json_encode($name);
$args = "('{$name}')";
$sql = "INSERT INTO `usertest` (`jsonstr`) VALUES {$args}";
$rs = $obj->query($sql);
......

执行的sql是这样的

INSERT INTO `usertest` (`jsonstr`) VALUES ('["\u8fd9\u662f\u4e2d\u6587","\u4f60\u597d\u554a","\u597d\u5c3c\u739b"]')

这里插入mysql时,\被当成了转义符给去掉了。

解决办法

$name = json_encode($name, JSON_UNESCAPED_UNICODE);

中文 json_encode 插入到mysql 问题

本作品采用《CC 协议》,转载必须注明作者和本文链接
六月的风
Junwind
讨论数量: 2

再转义一次就好了。addslashes或者 pdo->quote

8个月前 评论
  • 可以定义个方法
function encodeJson($output)   {
       // 看情况是否需要返回空
        if(empty($output)) {
            return '';
        }
        return json_encode($output, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
 }
8个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!