php把unicode編碼字符轉成utf-8格式


最近在采集的時候,遇到寫特殊的編碼體整個頁面所有的漢字都是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('["本期费用合计&#65306"]',true);

返回的是一個:下標未0數組。

注意:拼接json字符串的時候必須使用雙引號;中括號是[value];花括號是{key:value};

 

第三種:適用(&#、\u)

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

  

第三種方式雲里霧里至今也看不懂。。。。歡迎指導。。。。

 

 

 

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM