程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP 讀取文件亂碼的解決方法

PHP 讀取文件亂碼的解決方法

編輯:關於PHP編程

php 5的流讀取函數好像默認編碼是UTF-8,以前在php 4裡直接file_get_contents()讀取gb2312編碼的正常,到了5就亂碼了。網上的解決辦法說抓取後用iconv()轉碼。看後我就覺 得不對勁:一個是不一定編譯了iconv庫,更大的問題是編碼都跟流轉換的時候有關(如果用了iconv實際上php轉了兩次碼:流 -> UTF-8 -> GB2312):這不是白忙乎了嗎?

仔細看了下php的文檔(不知道大家都是怎麼寫代碼的,其實文檔上很清楚啊),上面關於fopen()及file_get_contents()都 提到了“默認是UTF-8,但是用戶可以用stream_default_encoding()或者用戶自定義上下文屬性改變編碼”(If unicode semantics are enabled, the default encoding of the read data is UTF-8. You can specify a different encoding by creating a custom context or by changing the default using stream_default_encoding().)。於是用stream_default_encoding(’gb2312′);測試:但是 faint的是,這個函數不存在?!似乎php 6才支持。不過天無絕人之路,還有“用戶自定義上下文屬性”可以用。

經過更仔細的看文檔,最後解決了這個問題:

//設置流的編碼格式,這是文件流(file),如果是網絡訪問,file改成http
$opts = array('file' => array('encoding' => 'gb2312'));
$ctxt = stream_context_create($opts);
file_get_contents(文件名, FILE_TEXT, $ctxt);

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved