我的问题是这样的,$text中大部分都是正常的中文,但个别地方含有unicode字符(类似&#21271这样的字符),我想把它替换掉。于是我找到一段unicode字符转正常汉字的代码,如下:function unicode() {  $tmp = file("unicode.txt");  foreach($tmp
 as
 $key => $val) {   $tm1=explode(":",$val);  
 
$char[trim($tm1[1])]=trim($tm1[0]);  
    unset($tm1,$val);  
 }  
 return $char;  
 }   然后准备全文匹配替换了,但是该怎么替换呢? 
$text =preg_replace($pat,$rec,$text);
 
替换规则应该是:
$pat = "/&#\d{5}/U";
 
问题是替换值$rec该怎么定义?$rec
应该是根据规则找到的unicode字符,交给unicode() 处理后得到的中文字符。
 
怎么样写才能正确运行替换呢?求高人指教。
 

解决方案 »

  1.   

    echo iconv('ucs-2', 'gbk', pack("n" ,21271));
      

  2.   

    谢楼上解答,不过我这个不是全部转码的问题,我要处理的$text中都是正常的汉字,只是有个别地方有大方&#27491这样的unicode字符,这些字符的转换处理可以交给我上面贴的function unicode(),困惑的是全文匹配替换,替换值该怎么写才能正确运行......
      

  3.   

    没能理解。 即使调用到unicode()函数。也没传参数进去啊。至少在你的代码中没看到替换跟函数之间有任何关系。
      

  4.   

    我把我现在这个贴出来,不过是错误的。抛砖引玉。
    想达到的功能:按规则找到unicode字符(&#开头的字符),并替换为GB2312编码的汉字。function unicode() {
    $tmp = file("../class/unicode.txt");
    foreach($tmp as $key => $val) 
    {
    $tm1=explode(":",$val);
    $char[trim($tm1[1])]=trim($tm1[0]);
    unset($tm1,$val);
    }
    return $char;
    }function RepCjPagetextStr($text,$r){$tmp=unicode();
    //unicode转中文的函数
    $pattern = "/&#\d{5}/U";
    //定义查找规则
    preg_match_all($pattern,$text,$tmpr);
    //正则表达式匹配
    foreach($tmpr[0] as $val)
    //循环遍历
    {//echo $val;
    $st.=$tmp[$val];
    //交函数处理
    $tt = iconv("UTF-8","GB2312",$st);
    //处理后转为GB2312编码的汉字
    $text = preg_replace($pattern,$tt,$text);
    //替换
    }
    return $text;
    }结果是查找到的所有unicode字符(&#开头的字符),都被替换成函数处理后的第一个汉字。请教一下到底该怎样写才正确呢? 
      

  5.   

    难道是这样?
    $str = "类似&#21271这样&#21270的字符";
    echo preg_replace("/&#\d{5}/e", "mb_convert_encoding('\\0', 'HTML-ENTITIES', 'GBK')", $str);
    ////类似北这样化的字符
      

  6.   

    楼上的代码不工作,查看结果页面源码&#21271还是&#21271,当然这种unicode字符在页面上都能显示为正常汉字。
    unicode字符转换现在不是大问题,交给function unicode() 处理后可以得到正常汉字。就是不知道怎么搜索替换这些东西
      

  7.   

    呵呵,参数忘记了,,这样子哦
    $str = "地方有大方&#27491这样的unicode字";
    echo preg_replace("/(&#\d{5});?/e", "mb_convert_encoding('\\1;', 'GBK', 'HTML-ENTITIES')", $str);
    //地方有大方正这样的unicode字
      

  8.   

    我又去试了试,真的可以了!衷心感谢amani11,谢谢你了!