PHP寫入生成csv或txt檔案亂碼解決方案

2021-09-17 19:59:27 字數 1010 閱讀 5205

相信很多人在使用php的過程中都遇到過生成檔案亂碼的情況,不論是使用fwrite還是file_put_contents寫入。

可能你會先嘗試從編碼入手嘗試解決,但最終的結果往往是不理想的,儘管我們都將其轉換為了utf-8編碼了...

那麼究其根本原因是什麼呢?

一句話:缺少頭部bom(當然,這裡指的肯定不是js的bom)

既然提到了bom,那麼可能有的同學不太了解這個傢伙,這裡我簡單說一下,老鳥可以跳過。

windows下用記事本之類的程式將文字檔案儲存為utf-8格式時,記事本會在檔案頭前面加上幾個不可見的字元(ef bb bf),就是所謂的bom(byte order mark)

不僅限於 記事本儲存的檔案,只要在檔案的開口包含了「ef bb bf」幾個不可見的字元(十六進製制應該是是xefxbbxbf,用二進位制編輯檔案可見)。這像是乙個約定俗成的東西,當系統看到這玩意的時候,就會覺得你這個檔案是utf-8編碼的。

這就是為什麼當檔案沒有bom時,你給使用者呈現的檔案就可能是亂碼的原因了。

ps : 其實你可以將bom理解成html中的charset屬性和xml中的encoding屬性,就是起乙個標識作用。

那麼如何在php中輸出bom呢?

答案是在所有內容輸出之前輸出:

print(chr(0xef).chr(0xbb).chr(0xbf));
當然,如果你是在生成檔案,可能是下面兩種:

fwrite($file, chr(0xef).chr(0xbb).chr(0xbf));

file_put_contents($file, chr(0xef).chr(0xbb).chr(0xbf));

PHP寫入txt檔案

myfiletoread fopen txt readme.txt r or die unable to open file myfileread fread myfiletoread,20 myfiletowrite fopen txt writeme.txt a or die unable to...

PHP生成TXT檔案 php讀取txt檔案內容

filename filename.txt header content disposition attachment filename filename 輸出內容 直接用echo輸出,r n 用以換行。第一步 處理中文檔名 filename 中文檔名.txt encoded filename ur...

CsvHelper, 幫助讀取和寫入CSV檔案的庫

csvhelper 用於讀取和寫入csv檔案的庫。非常快速,靈活且易於使用。支援讀取和寫入自定義類物件。要安裝 csvhelper,在包管理器控制台中執行以下命令 pm install package csvhelper 雙重許可 microsoft public 許可證 ms pl apache許...