在做PHP2次開發的時候,為了一個PHP的功能,需要使用PHP讀取一個TXT文件,但是在設計到中文的問題上,就遇到了惡心的亂碼問題;
首先查看一下TXT的編碼格式有四種:ANSI、Unicode、Unicode Big Endian、UTF-8
1、先是使用mb_detect_encoding($contents, array('GB2312','GBK','UTF-16','UCS-2','UTF-8','BIG5','ASCII'))語句
發現即使在其中增加了Unicode格式,已經無法獲得文件的編碼格式,但是對與ANSI和UTF-8格式倒是可以使用;
2、于是針對這個問題,專門做了一個如下的轉換:
$str = mb_convert_encoding ( $str, 'UTF-8','Unicode');
只是需要在前面加上一個編碼格式的判斷。
完整代碼如下:
if ($fname = $_FILES['nickname']['tmp_name']) { //獲取文件的編碼方式 $contents = file_get_contents($fname); $encoding = mb_detect_encoding($contents, array('GB2312','GBK','UTF-16','UCS-2','UTF-8','BIG5','ASCII')); $fp=fopen($fname,"r");//以只讀的方式打開文件 $text = ""; $num = 0; if(!(feof($fp))) { $num++; $str = trim(fgets($fp)); if ($encoding != false) { $str = iconv($encoding, 'UTF-8', $str); if ($str != "" and $str != NULL) { $text = $str; } } else { $str = mb_convert_encoding ( $str, 'UTF-8','Unicode'); if ($str != "" and $str != NULL) { $text = $str; } } } while(!(feof($fp))) { $str = ''; $str = trim(fgets($fp)); if ($encoding != false) { $str = iconv($encoding, 'UTF-8', $str); if ($str != "" and $str != NULL) { $text = $text.",".$str; } } else { $str = mb_convert_encoding ( $str, 'UTF-8','Unicode'); if ($str != "" and $str != NULL) { $text = $text.",".$str; } } } }
OK,完成。
以上就是PHP讀取TXT中文亂碼的解決方法的全部內容,希望對大家的學習和解決疑問有所幫助,也希望大家多多支持武林網。新聞熱點
疑難解答