function charcovert($string) {
if(!get_magic_quotes_gpc()) {
$string = str_replace('\'', '\\\'', $string);
} else {
$string = str_replace('\"', '"', $string);
}
return $string;
}这段代码时discuz的
为什么没有开启自动转义就替换 \' 为 \\\'
开启的情况下替换 \" 为 " 呢?
没开启自动转义的情况下为什么不直接用 addslashes()
或者除了转义 \' 还应该转义 \ 和 ' "然后就是开启转义的情况下已经自动转移了为什么还要把 \"转回来呢?
求高人解答

解决方案 »

  1.   

    函数的实际逻辑是:无论系统是否配置了转义,只对\和'字符做转义操作,而对"字符不做转义操作。
    应该是discuz在某处需要这么处理字符串。
      

  2.   

    没有开启:
    $string = str_replace('\'', '\\\'', $string);
    这里是把'转为\'.而不是把\'转为\\\'如果已经开启:
     $string = str_replace('\"', '"', $string);把被转义的\",转为",也就是取消对双引号的转义