| 函數 | 特點 | 依賴 |
|---|---|---|
iconv | 系統級、支持 //IGNORE //TRANSLIT、性能高 | libiconv(內置) |
mb_convert_encoding | 多字節感知、支持陣列批量、需 mbstring | mbstring 擴展 |
mb_detect_encoding | 自動檢測編碼、可指定候選列表 | mbstring 擴展 |
$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/GB2312 | A1-FE 雙字節 | GBK 擴展 GB2312 |
| UTF-8 | U+4E00-U+9FA5 (基本漢字) | 1-4 字節,支持全 Unicode |
| BIG5 | A1-FE 雙字節 | 繁體中文常用 |
UTF-8 範圍 > GBK,GBK→UTF-8 無損,UTF-8→GBK 會有字符丟失(需 //IGNORE)。
SET NAMES utf8mb4 / gbk。Content-Type: text/html; charset=UTF-8。mb_convert_encoding(支持陣列),單字符串用 iconv。