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

PHP iconv 編碼轉換解決中文亂碼完整指南

     編輯:PHP 相關知識

iconv 基礎語法

string iconv(string $from_encoding, string $to_encoding, string $string): string|false

關鍵參數://IGNORE 和 //TRANSLIT

後綴行為適用場景
無後綴遇無法轉換字符截斷後續內容嚴格轉換,確保數據純淨
//IGNORE忽略無法轉換字符,繼續處理數據清洗、容錯轉換、防截斷
//TRANSLIT音譯/近似替換 (如全形→半形)保持可讀性、特殊符號處理

核心代碼示例

<?php
$str = '你好、這裡是賣咖啡!';

// 基礎轉換
echo iconv('GBK', 'UTF-8', $str);           // 正常
echo iconv('UTF-8', 'GBK', $str);           // 可能截斷

// 防截斷 (推薦)
echo iconv('UTF-8', 'GBK//IGNORE', $str);   // 忽略非法字符
echo iconv('UTF-8', 'GBK//TRANSLIT', $str); // 近似替換

// 獲取編碼信息
print_r(iconv_get_encoding()); // 所有編碼設置

// 字符長度 (按字符非字節)
echo iconv_strlen($str, 'UTF-8'); // 12

// 字符截取 (按字符)
echo iconv_substr($str, 1, 3, 'UTF-8'); // "好、這"
?>

常見問題與解決

問題 1:轉換後內容丟失/截斷

<?php
$c = '測試•字符轉換•五一快樂!'; // 含特殊符號 •

// 錯誤:丟失後續內容
echo iconv('UTF-8', 'GBK', $c); // 只輸出 "測試"

// 正確:加 //IGNORE
echo iconv('UTF-8', 'GBK//IGNORE', $c); // "測試字符轉換五一快樂!"
?>

問題 2:特定字符無法轉換 (如 — 破折號)

<?php
$str = "標題—內容"; // — (U+2014) 在 GBK 中不存在

// 方案 1:忽略
iconv('UTF-8', 'GBK//IGNORE', $str); // "標題內容"

// 方案 2:音譯替換
iconv('UTF-8', 'GBK//TRANSLIT', $str); // "標題--內容" (替換為雙連字符)

// 方案 3:預先替換
$str = str_replace('—', '--', $str);
iconv('UTF-8', 'GBK', $str);
?>

問題 3:編碼檢測與自動轉換

<?php
function smartConvert($str, $to = 'UTF-8') {
    $encodings = ['UTF-8', 'GBK', 'GB2312', 'BIG5', 'ASCII'];
    $from = mb_detect_encoding($str, $encodings, true);
    if ($from && $from !== $to) {
        return iconv($from, $to . '//IGNORE', $str);
    }
    return $str;
}
?>

iconv vs mb_convert_encoding 對比

特性iconvmb_convert_encoding
性能快 (C層實現)較慢
多源編碼自動檢測不支持支持 (指定數組/auto)
//IGNORE //TRANSLIT支持不支持
非法字符處理截斷/忽略/替換替換為 ? 或子字符
依賴擴展iconv (通常內置)mbstring (需啟用)

最佳實踐建議

  1. 優先使用 iconv + //IGNORE:性能好、防截斷
  2. 編碼未知時:用 `mb_convert_encoding($str, 'UTF-8', 'auto')`
  3. 已知源編碼:直接 `iconv('GBK', 'UTF-8//IGNORE', $str)`
  4. 批量處理文件:`iconv -f GBK -t UTF-8 input.txt -o output.txt` (命令行)
  5. PHP 5.0+ iconv 內置:無需額外安裝,Windows 需啟用 `extension=iconv`

支持的編碼列表

<?php
// 獲取所有支持編碼
print_r(iconv_get_encoding('all'));
// 或命令行
// iconv -l
?>

常用:UTF-8, GBK, GB2312, BIG5, ISO-8859-1, Windows-1252, ASCII, SJIS, EUC-JP 等。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved