您的位置:首页 > 编程语言 > PHP开发

php把unicode编码字符转成utf-8格式

2016-02-19 09:43 567 查看
最近在采集的时候,遇到写特殊的编码体整个页面所有的汉字都是unicode的字符如下:

本期费用合计:    //本期费用合计:


\u54c8\u55bd    //哈喽    


  

着实让人头疼一把。好在在热心网友的帮助下有效解决了:

第一种:[b]适用(&#)[/b]

下面是一个转化函数:

//将uicode 转化成 utf-8
public function unescape($str) {
$str = rawurldecode($str);
preg_match_all("/(?:%u.{4})|&#x.{4};|&#\d+;|.+/U",$str,$r);
$ar = $r[0];
//print_r($ar);
foreach($ar as $k=>$v) {
if(substr($v,0,2) == "%u"){
$ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,-4)));
}
elseif(substr($v,0,3) == "&#x"){
$ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,3,-1)));
}
elseif(substr($v,0,2) == "&#") {

$ar[$k] = iconv("UCS-2BE","UTF-8",pack("n",substr($v,2,-1)));
}
}
return join("",$ar);
}


第二种:[b]适用(&#、\u)[/b]

在后来的项目开发中无意中发现一个小技巧同样可以实现这一功能:

通过json_decode()这个函数,可以转化成utf-8。只不过前提必须把字符串拼接成json格式的字符串:

json_decode('["本期费用合计:"]',true);


返回的是一个:下标未0数组。

注意:拼接json字符串的时候必须使用双引号;中括号是[value];花括号是{key:value};

第三种:适用(&#、\u)

preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2BE', 'UTF-8', pack('H4', '\\1'))", '本期费用合计:');


  

第三种方式云里雾里至今也看不懂。。。。欢迎指导。。。。


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: