最近遇到的一些編碼問題,時常在網頁裡面看到 &#xxxxxxx;
的字碼,透過瀏覽器,會將這些 unicode html code 轉成可以顯示的文字,例如:對於冷え性や生活習慣病,在網頁上看起來很正常,但是一但轉回到原始碼 (HTML code) 編輯的時候,就會變成:對於冷え性や生活習慣病
,這個樣子。
翻了 Google 大神,這個東西是因為編碼的關係,在 BIG-5 編碼中若是沒有可以顯示的文字,這些文字就會經過特殊的演算法則轉換成 &#xxxxxx;
這種樣子,這些就稱為 unicode html。麻煩的是,在儲存資料的時候,我並不希望會有這種東西出現,尤其是要將原本是 BIG-5 的資料轉換為 UTF-8 的時候,這些東西就很討厭。
依據大神的指示,這些字碼的來源,大概可以這麼解釋:unicode html 字碼來元是由原本的編碼,轉換為 UCS-2 之後,再取二進制轉換,再取一次 16 to 10 進制轉換,在加上 &# 而得到這個字碼。
以 PHP 來說,他大概是這個樣子:
<?php
$str = "温";
$unicodeHtml = base_convert(bin2hex(iconv("utf-8", "ucs-2", $str)), 16, 10);
print "&#".$unicodeHtml.";"
// 顯示結果
温
code html 的方式,那麼,轉回來呢,很簡單,將上述的程式邏輯反過來即可。unicode html 轉回文字,由於 php 沒有 hex2bin 的函式,所以我們自己簡單的寫一個來用。
<?php
function hex2bin($string)
{
$len = strlen($string);
return pack("H".$len, $string);
}
$str = "28201";
$unicodeHtml = iconv("ucs-2", "utf-8", hex2bin(base_convert($str, 10, 16)));
print $unicodeHtml;
// 顯示結果
温
這就是將 unicode html 轉回文字的方式。以上,希望對於要處理 unicode html 的人有所幫助。