最近在采集的時候,遇到寫特殊的編碼體整個頁面所有的漢字都是unicode的字符如下:
本期费用合计: //本期費用合計:
\u54c8\u55bd //哈嘍
着實讓人頭疼一把。好在在熱心網友的幫助下有效解決了:
第一種:適用(&#)
下面是一個轉化函數:
//將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格式的字符串:
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'))", '本期费用合计:');
第三種方式雲里霧里至今也看不懂。。。。歡迎指導。。。。