youyi000 2017-02-08 18:25:20 3131次浏览 4条回复 0 0 0

我有一个字符串:“公交\ud83d\ude8c”,再插入数据库后变成了“公交ud83d\ude8c”,追踪了一下,发现是PDO->quote()时导到前面的反斜杠被过滤了,请问这个是怎么回事,如何解决的? yii2

  • 回复于 2017-02-08 18:35 举报

    把代码贴出来。

  • 回复于 2017-02-08 18:38 举报

    数据库表字段的类型也说明下。

    1 条回复
    回复于 2017-02-09 11:10 回复

    数据库在MySql5.5.40和5.1.3都有这问题,utf-8编码格式,跟字段类别没有关系,我直接把代码提取出来尝试也是有这种情况,测试代码如下:

    $s2="测试一下中\\ud83d\\ude8c"
    $pdo=new PDO("mysql:host=localhost;dbname=XXX","root","root");
            $s3=$pdo->quote($s2);
            echo $s3;
    

    经过测试发现跟前面中文字符的个数有点关系。

  • 回复于 2017-02-09 11:33 举报

    经过测试,发现如果前面的中文字数是奇数就没有问题,是偶数会出现问题,是不是跟PHP中中文的编码方式有关了?

  • 回复于 2017-02-09 11:47 举报

    问题已经解决:PDO("mysql:host=localhost;dbname=XXX;charset=utf8","root","root"); 这样就可以了,在框架的db配置中
    'dsn' => 'mysql:host=localhost;dbname=XXX;charset=utf8', 这个就要加上编码,不管下面的'charset'有没有设置

您需要登录后才可以回复。登录 | 立即注册