在進行 PHP 開發中,經常會用到 fgets 函數來讀取文件內容,但是由于文件的編碼可能不一致,所以我們需要進行字符轉碼,否則就會出現亂碼的問題。
假設我們要讀取的文件是 GBK 編碼,而當前系統的編碼是 UTF-8,我們需要使用 PHP 內置的 iconv 函數實現轉碼。
$file = fopen('test.txt', 'r'); while (!feof($file)) { $line = fgets($file); $line = iconv('GBK', 'UTF-8', $line); // 進行轉碼 echo $line; } fclose($file);
代碼中的第 4 行用 iconv 函數將 $line 從 GBK 轉成 UTF-8 編碼,然后再輸出。
另外,我們還可以使用 mb_convert_encoding 函數進行轉碼,其用法如下:
$file = fopen('test.txt', 'r'); while (!feof($file)) { $line = fgets($file); $line = mb_convert_encoding($line, 'UTF-8', 'GBK'); echo $line; } fclose($file);
同樣是第 4 行進行轉碼,區別在于函數名和參數順序不同,具體使用哪一個,可以根據自己的使用習慣來決定。
如果在讀取文件時想同時保持文件編碼不變,可以在開始讀取文件之前先通過 iconv 或 mb_convert_encoding 函數對文件名進行轉碼:
$file = '文件名.txt'; $file = iconv('UTF-8', 'GBK', $file); // 或者 mb_convert_encoding($file, 'GBK', 'UTF-8'); $file_handle = fopen($file, 'r'); while (!feof($file_handle)) { $line = fgets($file_handle); echo $line; } fclose($file_handle);
以上代碼中,第 2 行將文件名從 UTF-8 轉成 GBK,然后再打開文件進行讀取。
需要注意的是,如果是 Unicode 編碼的文件,可以直接使用 PHP 內置的 utf8_decode 函數進行轉碼,在同時不改變文件編碼的情況下讀取文件:
$file = 'unicode.txt'; $file_handle = fopen($file, 'r'); while (!feof($file_handle)) { $line = fgets($file_handle); $line = utf8_decode($line); // 轉碼 echo $line; } fclose($file_handle);
以上就是關于 PHP fgets 函數的字符轉碼問題的一些解決方案,大家可以根據需要選擇適合自己的方法。