遇到問題:我需要把好大一坨類似“ 凡客 ”這樣的東西轉化成可讀的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 />}
註:原帖中正則部分本包含;(即每個字元是以分號結尾),而我的資料沒有分號,所以就去掉鳥~