您好,登錄后才能下訂單哦!
小編給大家分享一下解決utf8編碼中php導出CSV亂碼的方法,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
解決亂碼的方法:1、使用iconv函數將utf8編碼轉碼為GBK,語法“$str = iconv('utf-8', 'GBK//IGNORE', $str));”;2、在輸出內容前先輸出BOM頭,這樣Excel就可自動識別到是UTF-8了。
其實需求是把數據導出到Excel,很當然的想到大名鼎鼎的PHPExcel這個庫。這個庫是很強大,就是比較占用內存,超過10萬的數據,在web請求中基本是很難完成了。因此,使用原生PHP導出輕量的csv還是有需求的。
一般情況下,導出UTF-8編碼的常規內容到csv當中,用Excel打開都是亂碼,更別說一些非主流字符,或者是emoji表情。亂碼,是因為在windows系統下,默認的Excel是使用GBK編碼解析的。現如今,編碼哪還有不是使用UTF-8的,真有,那也是大公司知名產品會為了省那點流量出有GBK等其他編碼的版本,一般情況下都是使用UTF-8的。
要解決亂碼問題,PHP中做法一般是使用iconv函數進行轉碼為GBK,這樣,默認的Excel打開就不會有問題了。但對于emoji表情等主流字符,GBK并不能顯示,轉碼失敗直接為空了。可以添加//IGNORE標記進行忽略,這樣只是忽略了它們,其他正常字符是能夠保留的。
$str = iconv('utf-8', 'GBK//IGNORE', $str));
這可以說是一種折中方案。能不能不轉碼直接輸出UTF-8?難道Excel還不能自動識別UTF-8進而使用UTF-8來解碼顯示么?其實是可以的,只是它需要一個BOM頭(在非windows的世界里是沒有這個東西的),有這個BOM頭它就能識別到是UTF-8,否則識別不了用默認的GBK來處理,自然就是亂碼了。如何正確輸出所謂的BOM頭,看代碼:
$fp = fopen('./test_csv.csv', 'a'); fwrite($fp,chr(0xEF).chr(0xBB).chr(0xBF));//輸出BOM頭 fputcsv($fp, ['標題']); fputcsv($fp, ['解決亂碼']); fclose($fp);
可以解決所謂亂碼以及正常顯示emoji表情等非主流字符。
看完了這篇文章,相信你對解決utf8編碼中php導出CSV亂碼的方法有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。