PHP 內建支援 BIG5-HKSCS(香港增補字符集),非傳說中不存在。關鍵在於正確指定編碼名稱與轉換流程。
<meta charset="UTF-8">iconv('BIG5-HKSCS', 'UTF-8', $string)function String2Unicode($data, $language) {
$data = nl2br(trim($data));
$data = str_replace('<br />', chr(13), $data);
$str = '';
preg_match_all("/[\x80-\xff]?./", $data, $ar);
foreach($ar[0] as $v) {
if($v != '' && $v != chr(13)) {
$str .= "".utf82unicode(iconv($language, "UTF-8", $v)).";";
} else {
$str .= $v;
}
}
return $str;
}
function utf82unicode($c) {
switch(strlen($c)) {
case 1: return ord($c);
case 2:
$n = (ord($c[0]) & 0x3f) << 6;
$n += ord($c[1]) & 0x3f;
return $n;
case 3:
$n = (ord($c[0]) & 0x1f) << 12;
$n += (ord($c[1]) & 0x3f) << 6;
$n += ord($c[2]) & 0x3f;
return $n;
case 4:
$n = (ord($c[0]) & 0x0f) << 18;
$n += (ord($c[1]) & 0x3f) << 12;
$n += (ord($c[2]) & 0x3f) << 6;
$n += ord($c[3]) & 0x3f;
return $n;
}
}
// BIG5-HKSCS 字串轉 Unicode 實體
$unicode_str = String2Unicode($hkscs_string, 'BIG5-HKSCS');
// 直接存入 UTF-8 資料庫
$utf8_str = iconv('BIG5-HKSCS', 'UTF-8', $hkscs_string);
iconv 需系統安裝 libiconv 並支援 BIG5-HKSCS(主流 Linux 發行版預設包含)。/[\x80-\xff]?./ 假設輸入為雙位元組編碼,若來源已為 UTF-8 需改用 /./u。nl2br → chr(13) 保留換行語意,避免實體化破壞結構。