在使用fgetcsv讀取檔案內容,但是中文部分總是無法顯示,如果一段文字中夾雜著字母和中文,則字母前的中文無法讀取,但字母後的中文卻能夠保留。
第一種解決辦法:
上php官網翻了一下,原來加上setlocale即可解決。
原本用php4沒出現這問題,大概是php5才會這樣吧...
注釋:setlocale() 函式僅針對當前指令碼改變地區資訊。
// utf-8
setlocale
(lc_all, 'en_us.utf-8');
// 簡體
setlocale
(lc_all, 'zh_cn');
//設定回系統預設
setlocale以下是常用的地區標識(lc_all,null);
zh_cn gb2312
en_us.utf-8 utf-8
zh_tw big5
zh_hk big5-hkscs
zh_tw.euc-tw euc-tw
zh_tw.utf-8 utf-8
zh_hk.utf-8 utf-8
zh_cn.gbk gbk
第二種解決辦法:(替代函式, 執行效率低)
php自帶的fgetcsv函式對中文支援總出問題,處理中文文件時,經常出現中文字串丟字或亂碼的情況。但找了個替代函式:
function fgetcsv_reg(& $handle, $length = null, $d = ',', $e = '"')
$_csv_line = preg_replace('/(?: |[ ])?$/', $d, trim($_line));
$_csv_pattern = '/(' . $e . '[^' . $e . ']*(?:' . $e . $e . '[^' . $e . ']*)*' . $e . '|[^' . $d . ']*)' . $d . '/';
preg_match_all($_csv_pattern, $_csv_line, $_csv_matches);
$_csv_data = $_csv_matches[1];
for ($_csv_i = 0; $_csv_i < count($_csv_data); $_csv_i++)
return empty ($_line) ? false : $_csv_data;
}
fgetcsv函式的「陷阱」
fgetcsv函式的 陷阱 今天遇到乙個奇怪的問題,前幾天寫的乙個php解析csv檔案格式的 在本地執行正常,到了測試站上,就感覺像洩了氣的球一樣,不頂用了,而且只要是中文輸入,總是不能正確讀取,開始的時候懷疑是版本問題,因為本地裝的是5.3的最新版,所以總是有所懷疑,可是看了手冊,卻推翻了我的這個...
c 讀取mysql的中文亂碼問題
1 選用gb2312編碼 2 設定my.ini檔案中的預設編碼 分別在 mysql 和 mysqld 配置段中增加或修改default charater set gb2312 3 建立資料庫時編碼選用gb2312 4 建立表時編碼選用gb2312,collation選用gb2312 chines c...
linux中讀取文字的中文亂碼問題
一 單一檔案設定 1.開啟終端,進入到檔案所在目錄.2.使用命令符 iconv f gb18030 t utf8 a.hpp o b.hpp把gb18030編碼的a.hpp轉換成utf8的b.hpp。這樣b.hpp就成為linux支援的編碼。設定完畢。二 整體設定 1.開啟終端,執行如下命令,開啟環...