我的问题是这样的,$text中大部分都是正常的中文,但个别地方含有unicode字符(类似北这样的字符),我想把它替换掉。于是我找到一段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() 处理后得到的中文字符。
怎么样写才能正确运行替换呢?求高人指教。
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() 处理后得到的中文字符。
怎么样写才能正确运行替换呢?求高人指教。
想达到的功能:按规则找到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字符(&#开头的字符),都被替换成函数处理后的第一个汉字。请教一下到底该怎样写才正确呢?
$str = "类似北这样化的字符";
echo preg_replace("/&#\d{5}/e", "mb_convert_encoding('\\0', 'HTML-ENTITIES', 'GBK')", $str);
////类似北这样化的字符
unicode字符转换现在不是大问题,交给function unicode() 处理后可以得到正常汉字。就是不知道怎么搜索替换这些东西
$str = "地方有大方正这样的unicode字";
echo preg_replace("/(&#\d{5});?/e", "mb_convert_encoding('\\1;', 'GBK', 'HTML-ENTITIES')", $str);
//地方有大方正这样的unicode字