首頁 >後端開發 >PHP問題 >php怎麼匯出csv設定編碼

php怎麼匯出csv設定編碼

藏色散人
藏色散人原創
2021-09-17 10:00:271985瀏覽

php導出csv設定編碼的方法:1.使用iconv方法將導出的內容轉碼由utf-8轉為gb2312;2、使用mb_convert_encoding方法轉換編碼。

php怎麼匯出csv設定編碼

本文操作環境:Windows7系統、PHP7.1版,Dell G3電腦

php怎麼匯出csv設定編碼? PHP下導出csv亂碼?

  我們之前都是使用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視頻教程

以上是php怎麼匯出csv設定編碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn