当表单提交生僻字,如"芢".
经过转义后会变成:芢\
这样在写入数据库时产生类似:update tablename set username = '芢\' where userid = '1'
程学会报错.
请问有何解决办法.不要说不转义或者过滤\.因为可能会出现提交1234'abcd芢之类的情况,正常情况应该转义成1234\'abcd芢,但是因为有个"芢",会被转义成1234\'abcd芢\

解决方案 »

  1.   

    把你最终的sql打印出来
    还有,把库设为utf8看看
      

  2.   

    是的,GBK 是有这种情况,不太好处理
    你可以考虑转义时只转义“'”
    $txt = str_replace("'", "\\'", $txt);
      

  3.   

    2楼3楼的纯属打酱油,4楼的办法也行不通
    如果POST的数据是1234'5678"abcd\啊啊芢,怎么办.单单处理单引号不行的
    而且我测试过了,如果get_magic_quotes_gpc()没开
    $value = $_POST['values'];
    然后
    $value = str_replace('"','\\"',$value);
    这样没问题
    $value = str_replace("'","\\'",$value);
    这样也没问题
    $value = str_replace('\\','\\\\',closeEscape($value));
    这样就来问题
    POST过来的数据变成了,芢\
    另外更郁闷的是如果直接写一句
    $value = '芢';
    程序直接报错
      

  4.   

    如果POST的数据是1234'5678"abcd\啊啊芢,怎么办.单单处理单引号不行的
    为什么不行?
    除了单引号,其他传入的字符(不是代码中的)都不会出现问题
      

  5.   

    如果POST的字符最后一个是\,比如1234\,只转义单引号后,在SQL语句中不是成了类似update tablename set titlename = '1234\' 了?不报错才鬼?
      

  6.   

    在代码中字符串写入的 \ 要写作 \\ ,因为php解释程序时需要有一次转义过程。写作 \\ 才能使php得到 \
    而传入的 \ 已然是 \ 了,不会产生歧义例
    设 test.txt 的内容为
    \则
    $s = file_get_contents('test.txt');
    echo $s; //将输出 \
    echo "$s"; //同样输出 \ 而不会出错

    echo "\"; //写成这样就不能通过语法检查
    echo "\\"; //只能写成这样,才可以输出 \ 
      

  7.   

    你还不明白我的意思
    先把转义关了
    $magic_quotes_gpc = get_magic_quotes_gpc();
    if($magic_quotes_gpc) {
    $_POST = stripslashes($_POST);
    $_GET = stripslashes($_GET);
    }然后
    $a = $_POST['a'];
    写进数据库,前面数据库联接什么的全省略
    mysql_query('update tablename set titlename = \'' . addslashes($a) . '\' where id = \'1\'');
    如果POST的字符是"我的名字叫李芢",报错
    如果像你说的只处理单引号,那么POST的字符是"我的名字叫李\",还是报错
    只要处理"\",那么遇到少数几个生僻中文就会有问题
      

  8.   

    10楼靠谱,下面的代码是关键吧。
    你还不明白我的意思
    先把转义关了
    $magic_quotes_gpc = get_magic_quotes_gpc();
    if($magic_quotes_gpc) {
    $_POST = stripslashes($_POST);
    $_GET = stripslashes($_GET);
    }
      

  9.   

    貌似都是转义的问题 开启get_magic_quotes_gpc()在里面进行addslashes操作 看是否出现生僻字不一致
      

  10.   

    php.ini中
    magic_quotes_gpc
    从5.4开始已经取消并固定为打开,适应一下吧“芢”的GBK内码为C65C,所有5C结尾的汉字都会有类似问题,你可以自己搞个字表(也不多)
    因为汉字GBK没有5C开头的,所以只考虑后半部分的字节就行同样的问题也会出现在后半部为7C的汉字应对方案自己想吧,多的是,找个合适自己网站的就行