首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 處理 BIG5-HKSCS 編碼:HTML、資料庫與 Unicode 轉換完整方案

     編輯:PHP 綜合知識

PHP 內建支援 BIG5-HKSCS(香港增補字符集),非傳說中不存在。關鍵在於正確指定編碼名稱與轉換流程。

編碼轉換流程

  1. 頁面編碼:HTML 頁面宣告 <meta charset="UTF-8">
  2. 寫入資料庫前:iconv('BIG5-HKSCS', 'UTF-8', $string)
  3. 需轉 Unicode 實體(&#nnnn;)時:使用下方自訂函數

字串轉 Unicode 實體函數

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) 保留換行語意,避免實體化破壞結構。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved