處理多來源資料時,常需判斷字串編碼以避免亂碼。本文提供一個輕量級函數 chkCode(),透過 iconv 雙向轉換驗證,快速識別字串屬於 ASCII、GBK 或 UTF-8 哪種編碼。
public function chkCode($string) {
$encodings = ['ASCII', 'GBK', 'UTF-8'];
foreach ($encodings as $enc) {
// 嘗試:原編碼 -> UTF-8 -> 原編碼,若結果一致則為該編碼
if ($string === iconv('UTF-8', $enc, iconv($enc, 'UTF-8', $string))) {
return $enc;
}
}
return null; // 無法識別
}
$str1 = 'Hello World'; // ASCII
$str2 = '中文測試'; // UTF-8 (預設)
$str3 = iconv('UTF-8', 'GBK', $str2); // GBK
echo chkCode($str1); // 輸出:ASCII
echo chkCode($str2); // 輸出:UTF-8
echo chkCode($str3); // 輸出:GBK
此方法假設輸入字串純粹屬於單一編碼。若字串包含混合編碼或非標準字元,可能誤判。生產環境建議搭配 mb_detect_encoding() 或專用偵測庫(如 charlock_holmes)提高準確度。