最近在采集的时候,遇到写特殊的编码体整个页面所有的汉字都是统一的字符如下:
着实让人头疼一把好在在热心网友的帮助下有效解决了:
第一种:适用(&#)
下面是一个转化函数:
1 2 3 4 五 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | //将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); } |
第二种:适用(#,\ U)
在后来的项目开发中无意中发现一个小技巧同样可以实现这一功能:
通过json_decode()这个函数,可以转化成UTF-8只不过前提必须把字符串拼接成JSON格式的字符串:
1 | json_decode( '["本期费用合计:"]' , true ); |
返回的是一个:下标未0数组。
注意:拼接JSON字符串的时候必须使用双引号;中括号是[值];花括号是{键:值};
第三种:适用(#,\ U)
1 | preg_replace( "#\\\u([0-9a-f]{4})#ie" , "iconv('UCS-2BE', 'UTF-8', pack('H4', '\\1'))" , '本期费用合计:' ); |