編碼轉換:unicode(10進位)轉utf8

來源:互聯網
上載者:User

 

遇到問題:我需要把好大一坨類似“ &#20961&#23458 ”這樣的東西轉化成可讀的utf8編碼。

 

一步一步探索:

1、unicode打頭的擴充函數在我的PHP5.2.x中還不可用

2、網上找了很多代碼來實驗,都以失敗告終

3、重新google後得知,該類型編碼為html頁面中可以正常顯示為漢字的unicode的10進位表示形式

4、再次翻手冊,在utf8_encode函數的評論中看到了一個有用的回複,實驗成功!(PS:帶評論的手冊真他喵的好用~)

 

貼代碼:

function html_to_utf8($data)<br />{<br /> return preg_replace("//&/#([0-9]{3,10})/e", '_html_to_utf8("/1")', $data);<br />}<br />function _html_to_utf8($data)<br />{<br /> if ($data > 127)<br /> {<br /> $i = 5;<br /> while (($i--) > 0)<br /> {<br /> if ($data != ($a = $data % ($p = pow(64, $i))))<br /> {<br /> $ret = chr(base_convert(str_pad(str_repeat(1, $i + 1), 8, "0"), 2, 10) + (($data - $a) / $p));<br /> for ($i; $i > 0; $i--)<br /> $ret .= chr(128 + ((($data % pow(64, $i)) - ($data % ($p = pow(64, $i - 1)))) / $p));<br /> break;<br /> }<br /> }<br /> }<br /> else<br /> $ret = "&#$data;";<br /> return $ret;<br />} 

 

註:原帖中正則部分本包含;(即每個字元是以分號結尾),而我的資料沒有分號,所以就去掉鳥~

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.