网上提供的GB_replace 不行,用 urlencode 或转成 utf-8 编码也不行。
mb_eregi_replace空间不支持。完了,还有什么办法啊?????

解决方案 »

  1.   

    楼主的mb_string扩展有没有打开啊,如果打开的话,可以用双字节可靠的mb_ereg_replace函数,因为str_replace不是双字节可靠的函数,<?
    echo mb_ereg_replace("格式","新格式","将中文字符的格式替换");
    //输出 将中文字符的新格式替换
    ?>
      

  2.   

    是的,建议还是用mbstring的函数~
      

  3.   

    我也想啊,不过前提要黑掉服务器。搞定了。不过这样性能应该会差点。。可以目前最稳定的中文 str_replace 啊,,哈哈。function str_replace_cn($needle, $str, $haystack, $charset = "gb2312"){
    $re['utf-8']   = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
        $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
        $re['gbk']    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
        $re['big5']   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";    preg_match_all($re[$charset], $haystack, $match_haystack);
        preg_match_all($re[$charset], $needle, $match_needle); if(!in_array($match_needle[0][0], $match_haystack[0]))return $haystack;//无匹配 $match_haystack = $match_haystack[0];
    $match_needle = $match_needle[0];    for($i = 0; $i < count($match_haystack); $i ++){
    if($match_haystack[$i] == "")continue;
    if($match_haystack[$i] == $match_needle[0]){
    if(count($match_needle) == 1){//如果只一个字符
    $match_haystack[$i] = $str;
    }else{
    $flag = true;
    for($j = 1; $j < count($match_needle); $j ++){
    if($match_haystack[$i + 1] != $match_needle[$j]){
    $flag = false;
    break;
    }
    }
    if($flag){//匹配
    $match_haystack[$i] = $str;
    for($j = 1; $j < count($match_needle); $j ++){
    $match_haystack[$i + $j] = "";
    }
    }
    }
    }
    }
    return implode("", $match_haystack);
    }
      

  4.   


    function str_replace_cn($needle, $str, $haystack, $charset = "gb2312"){
    $re['utf-8']   = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
        $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
        $re['gbk']    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
        $re['big5']   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";    preg_match_all($re[$charset], $haystack, $match_haystack);
        preg_match_all($re[$charset], $needle, $match_needle); for($i = 0; $i < count($match_needle); $i ++){
    if(!in_array($match_needle[0][$i], $match_haystack[0]))return $haystack;//无匹配
    } $match_haystack = $match_haystack[0];
    $match_needle = $match_needle[0];    for($i = 0; $i < count($match_haystack); $i ++){
    if($match_haystack[$i] == "")continue;
    if($match_haystack[$i] == $match_needle[0]){
    if(count($match_needle) == 1){//如果只一个字符
    $match_haystack[$i] = $str;
    }else{
    $flag = true;
    for($j = 1; $j < count($match_needle); $j ++){
    if($match_haystack[$i + 1] != $match_needle[$j]){
    $flag = false;
    break;
    }
    }
    if($flag){//匹配
    $match_haystack[$i] = $str;
    for($j = 1; $j < count($match_needle); $j ++){
    $match_haystack[$i + $j] = "";
    }
    }
    }
    }
    }
    return implode("", $match_haystack);
    }
      

  5.   

    汗,错了一点function str_replace_cn($needle, $str, $haystack, $charset = "gb2312"){
        $re['utf-8']   = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
        $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
        $re['gbk']    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
        $re['big5']   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";    preg_match_all($re[$charset], $haystack, $match_haystack);
        preg_match_all($re[$charset], $needle, $match_needle);    for($i = 0; $i < count($match_needle); $i ++){
            if(!in_array($match_needle[0][$i], $match_haystack[0]))return $haystack;//无匹配
        }    $match_haystack = $match_haystack[0];
        $match_needle = $match_needle[0];    for($i = 0; $i < count($match_haystack); $i ++){
            if($match_haystack[$i] == "")continue;
            if($match_haystack[$i] == $match_needle[0]){
                if(count($match_needle) == 1){//如果只一个字符
                    $match_haystack[$i] = $str;
                }else{
                    $flag = true;
                    for($j = 1; $j < count($match_needle); $j ++){
                        if($match_haystack[$i + $j] != $match_needle[$j]){
                            $flag = false;
                            break;
                        }
                    }
                    if($flag){//匹配
                        $match_haystack[$i] = $str;
                        for($j = 1; $j < count($match_needle); $j ++){
                            $match_haystack[$i + $j] = "";
                        }
                    }
                }
            }
        }
        return implode("", $match_haystack);
    }