解決PHP下匯出csv亂碼小記

來源:互聯網
上載者:User

標籤:

  我們之前都是使用PHPexcel匯出我們的一些資料的,由於Phpexcel對匯出超出1萬條資料會導至逾時和記憶體暴漲,後來我們就改用資料匯出成csv格式的。

相信很多朋友們在用PHP匯出csv檔案時都遇到各種亂碼問題。網上搜了一堆都是用加BOM的方式來解決,這個方法我試了好多次在我們的測試和生產環境下都不管用,不知道是為什麼。

 

  後來使用iconv方法將匯出的內容轉碼由utf-8轉為gb2312,奇蹟終於出來了,可以正常顯示了,不過經同事發現,我們匯出400多條資料裡竟然少了幾十條資料(我是一條一條轉碼然後拼接出出的csv字串)。於是到度娘上找iconv轉碼失敗的問題,發現iconv原來是有BUG的,對於某些中文字轉不了,轉不了還不能跳過然後返回空值,是這個原因導致少了幾十條資料,同時給出了用mb_convert_encoding 這個方法來轉換。於是稍作修改就改成了用mb_convert_encoding方法了,在本地機測試非常正常,代碼如下:

 

$str = mb_convert_encoding($str,‘gb2312‘);

  

但發布到線上匯出資料還是一堆亂碼,但與之前不作轉碼時的亂碼還不一樣,說明mb_convert_encoding方法是起作用的。查了一下mb_convert_encoding方法有三個參數$from_encoding,第三個參數是選擇性參數,網上大多數的樣本都是不使用第三個參數的,第三個參數預設也是null值。於是我把它用起來改成

 

$str = mb_convert_encoding($str,‘gb2312‘,‘utf-8‘);

 

在本地開發機上測試是正常的,發布到生產環境,吼吼,一切正常了。

 

這究竟是為什麼? 真沒時間去深究了,有知道的同學請告訴我一下吧

解決PHP下匯出csv亂碼小記

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.