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

PHP 字符串編碼轉換實戰:iconv、mb_convert_encoding、自動檢測與 //IGNORE 容錯技巧

     編輯:PHP 相關知識

核心函數對比

函數特點依賴
iconv系統級、支持 //IGNORE //TRANSLIT、性能高libiconv(內置)
mb_convert_encoding多字節感知、支持陣列批量、需 mbstringmbstring 擴展
mb_detect_encoding自動檢測編碼、可指定候選列表mbstring 擴展

iconv 關鍵技巧://IGNORE 容錯

$str = '測試•字符•五一快樂!'; // • 為特殊字符
echo iconv('UTF-8', 'GBK', $str); 
// 輸出:測試 後面全丟失,甚至報錯

echo iconv('UTF-8', 'GBK//IGNORE', $str);
// 輸出:測試字符五一快樂! // 自動跳過無法轉換字符

//TRANSLIT** 嘗試轉換為相近字符(如 é → e),//IGNORE** 直接丟棄無法轉換字符。

自動檢測並轉換為目標編碼

function phpcharset($data, $target_encoding) {
    if (is_array($data)) {
        foreach ($data as $k => $v) {
            $data[$k] = phpcharset($v, $target_encoding);
        }
        return $data;
    }
    $encodings = ['ASCII', 'UTF-8', 'GBK', 'GB2312', 'BIG5'];
    $detected = mb_detect_encoding($data, $encodings);
    $target = strtoupper($target_encoding);
    if ($detected && $detected !== $target) {
        return mb_convert_encoding($data, $target, $detected);
    }
    return $data;
}

常見編碼範圍對照

編碼中文範圍備註
GBK/GB2312A1-FE 雙字節GBK 擴展 GB2312
UTF-8U+4E00-U+9FA5 (基本漢字)1-4 字節,支持全 Unicode
BIG5A1-FE 雙字節繁體中文常用

UTF-8 範圍 > GBK,GBK→UTF-8 無損,UTF-8→GBK 會有字符丟失(需 //IGNORE)。

避坑指南

  • 文件本身編碼必須與聲明一致(UTF-8 無 BOM / GBK)。
  • 數據庫連接 SET NAMES utf8mb4 / gbk。
  • HTTP Header Content-Type: text/html; charset=UTF-8。
  • 批量轉換優先用 mb_convert_encoding(支持陣列),單字符串用 iconv。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved