使用preg_replace正则替换后,内容中所有的"都变成了\"。 规则中没有定义这个啊,怎样才能防止"编程\"
或者我在进行一次正则替换,将\"再替换回" 要怎么做?

解决方案 »

  1.   

    应该在php自动转义的吧
    addslashes -- 使用反斜线引用字符串
    stripslashes --  Un-quote string quoted with addslashes() 去掉反斜线
      

  2.   

    楼上的,php自动转义的?那要怎么才能禁止他自动转义? 
      

  3.   

    首先,在php.ini中 magic_quotes_gpc = Off然后,在代码中通过get_magic_quotes_gpc()判断当前程序是否自动转义
      

  4.   

    set_magic_quotes_runtime
    查一下手册
      

  5.   

    //替换关键字
    function ReplaceKey($newstext){
    global $empire,$dbtbpre,$public_r;
    global $rs,$s,$i;
    $rs=$s=array();
    $i=0;function r($newstext){
        global $rs,$s,$i;
        $i++;
        $search="-]-$i-[-";
        $s[$i]=$search;
        $rs[$i]=$newstext;
        return $search;
    }
    $newstext = preg_replace("/(<a(.*))(>)(.*)(<)(\/a>)/isU", '\\1-]-\\4-[-\\6', $newstext);
    $newstext = preg_replace("/(<)(.*)(-\]-)/isU", '\\1-]-\\2-[-\\3', $newstext);
    $newstext = preg_replace("/(<)(.*)(>)/isU", '\\1-]-\\2-[-\\3', $newstext);
    $sql=$empire->query("select keyname,keyurl from {$dbtbpre}enewskey");
    while($r=$empire->fetch($sql))
    {
    $newstext=preg_replace('/(-\]-.+?-\[-)/e',"r('\\1')",$newstext);
    $newstext=empty($public_r[repkeynum])?str_replace($r[keyname],'<a href="'.$r[keyurl].'" target="_blank" class="infotextkey">'.$r[keyname].'</a>',$newstext):preg_replace('/'.$r[keyname].'/','<a href="'.$r[keyurl].'" target="_blank" class="infotextkey">'.$r[keyname].'</a>',$newstext,$public_r[repkeynum]);
    $newstext=str_replace($s,$rs,$newstext);
    }
    $newstext = preg_replace("/(<)(-\]-)(.*)(-\[-)(>)/isU", '\\1\\3\\5', $newstext);
    $newstext = preg_replace("/(<)(-\]-)(.*)(-\[-)(-\]-)/isU", '\\1\\3\\5', $newstext);
    $newstext = preg_replace("/(<a(.*))-\]-(.*)-\[-(\/a>)/isU", '\\1>\\3<\\4', $newstext); return $newstext;
    }贴出我的代码