解決亂碼的方法:1、使用iconv函數將utf8編碼轉碼為GBK,語法“$str = iconv('utf-8', 'GBK//IGNORE', $str));” ;2.在輸出內容前先輸出BOM頭,這樣Excel就可自動辨識到是UTF-8了。
推薦:《PHP影片教學》
#其實需求是把資料匯出到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亂碼怎麼解?的詳細內容。更多資訊請關注PHP中文網其他相關文章!