phpexcel 讀取中文gbk資料的csv在linux伺服器下亂碼的解決方法.
阿新 • • 發佈:2019-02-11
在做一個phpexcel匯入csv資料時,出現詭異現象, 本地windows下除錯順暢, 無亂碼, 釋出到linux伺服器後出現亂碼了.
各種排查, 初步以為是iconv編碼轉換的問題, 各種編碼嘗試, gbk, gb2312, utf8, asii等都不行. 最後看到了其使用的
fgetcsv函式. php手冊中有這麼一句備註:
Note: 該函式對區域設定是敏感的。比如說 LANG 設為 en_US.UTF-8 的話,單位元組編碼的檔案就會出現讀取錯誤。
一看伺服器phpinfo的LANG, 剛好就是en_US.UTF-8 . 我次奧. 頓悟了.
解決方法, 程式里加 setlocale(LC_ALL, 'zh_CN');
setlocale(LC_ALL, 'zh_CN');
$objExcelReader = PHPExcel_IOFactory::createReader('CSV');
$objExcelReader->setInputEncoding('GBK');
$objExcelReader->setDelimiter(',');
$objPHPExcel = $objExcelReader->load($path);
各種排查, 初步以為是iconv編碼轉換的問題, 各種編碼嘗試, gbk, gb2312, utf8, asii等都不行. 最後看到了其使用的
fgetcsv函式. php手冊中有這麼一句備註:
Note: 該函式對區域設定是敏感的。比如說 LANG 設為 en_US.UTF-8 的話,單位元組編碼的檔案就會出現讀取錯誤。
一看伺服器phpinfo的LANG, 剛好就是en_US.UTF-8 . 我次奧. 頓悟了.
解決方法, 程式里加 setlocale(LC_ALL, 'zh_CN');
setlocale(LC_ALL, 'zh_CN');
$objExcelReader = PHPExcel_IOFactory::createReader('CSV');
$objExcelReader->setInputEncoding('GBK');
$objExcelReader->setDelimiter(',');
$objPHPExcel = $objExcelReader->load($path);