PHP 5 預設串流編碼為 UTF-8,讀取 Big5/GB2312 編碼檔案會產生亂碼。許多開發者誤用 iconv() 二次轉碼,實則可直接在串流層指定編碼,避免效能損耗。
$content = file_get_contents('big5.txt');
$content = iconv('Big5', 'UTF-8', $content); // 實際經歷:檔案→UTF-8→Big5→UTF-8
使用 stream_context_create() 建立自訂內容:
<?php
// 設定檔案串流編碼為 Big5
$opts = ['file' => ['encoding' => 'Big5']];
$context = stream_context_create($opts);
// 直接以正確編碼讀取
$content = file_get_contents('big5.txt', FILE_TEXT, $context);
// 網路串流同理(http/https)
$opts = ['http' => ['encoding' => 'GB2312']];
$context = stream_context_create($opts);
$html = file_get_contents('https://example.com/gb2312.html', false, $context);
?>
encoding 參數,直接指定來源編碼所有支援 context 參數的檔案函數均適用:
file_get_contents()fopen() / fread()file()readfile()<?php
// 確認串流編碼設定生效
$meta = stream_get_meta_data($handle);
var_dump($meta['wrapper_data']); // 可見編碼資訊
?>
掌握串流編碼設定,能從根源解決跨編碼檔案讀取問題,同時提升效能。