摘要:前言相信很多人在使用的過程中都遇到過生成文件亂碼的情況,不論是使用還是寫入。這就是為什么當文件沒有時,你給用戶呈現(xiàn)的文件就可能是亂碼的原因了。方案那么如何在中輸出呢答案是在所有內(nèi)容輸出之前輸出當然,如果你是在生成文件,可能是下面兩種
前言
相信很多人在使用PHP的過程中都遇到過生成文件亂碼的情況,不論是使用fwrite還是file_put_contents寫入。
可能你會先嘗試從編碼入手嘗試解決,但最終的結(jié)果往往是不理想的,盡管我們都將其轉(zhuǎn)換為了UTF-8編碼了...
那么究其根本原因是什么呢?
一句話:缺少頭部BOM(當然,這里指的肯定不是Js的Bom)
BOM既然提到了BOM,那么可能有的同學不太了解這個家伙,這里我簡單說一下,老鳥可以跳過。
在Windows下用記事本之類的程序?qū)⑽谋疚募4鏋?b>UTF-8格式時,記事本會在文件頭前面加上幾個不可見的字符(EF BB BF),就是所謂的BOM(Byte order Mark)。
不僅限于 記事本保存的文件,只要在文件的開口包含了“EF BB BF” 幾個不可見的字符(十六進制應(yīng)該是是xEFxBBxBF,用二進制編輯文件可見)。這像是一個約定俗成的東西,當系統(tǒng)看到這玩意的時候,就會覺得你這個文件是UTF-8編碼的。
這就是為什么當文件沒有BOM時,你給用戶呈現(xiàn)的文件就可能是亂碼的原因了。
PS : 其實你可以將BOM理解成HTML中的charset屬性和XML中的encoding屬性,就是起一個標識作用。
方案那么如何在PHP中輸出BOM呢?
答案是在所有內(nèi)容輸出之前輸出:
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));
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/22295.html
摘要:而且下載的內(nèi)容如果有中文字符的話還有亂碼的現(xiàn)象。接下來就是介紹一下兩個庫可以解決我們的問題,一個是可以通過的數(shù)據(jù)去生成文件的內(nèi)容,然后在,另外一個庫則是用來把內(nèi)容的編碼轉(zhuǎn)換為格式,這樣一來就能夠解決中文亂碼的問題。 前言 之前有個項目中使用到了一個前端的download.js庫,主要是用來拼接內(nèi)容然后生成一個.txt或者.csv等文件讓用戶下載,不過目前這個庫不支持了chrome和sa...
摘要:問題生成文件到目錄下并下載,下載后發(fā)現(xiàn)文件亂碼。解決這里我們只要在文件的開始輸出頭,告訴文件的編碼方式,從而讓打開時采用正確的編碼。第一種在所有內(nèi)容之前輸出第二種也可以直接寫入到文件最前端什么是參考百度百科鏈接 問題 生成CSV文件到/tmp目錄下并下載,下載后發(fā)現(xiàn)文件亂碼。 解決 這里我們只要在文件的開始輸出BOM頭,告訴windows CSV文件的編碼方式,從而讓Excel打開CS...
小編寫這篇文章的主要目的,主要是講解一下關(guān)于Python的一些知識,比如教大家怎么能夠?qū)崟r的去進行寫入數(shù)據(jù),提高工作的效率,關(guān)于其具體的代碼,下面小編給大家詳細解答下。 之前在做數(shù)據(jù)分析的時候,我們需要處理大量高并發(fā)的數(shù)據(jù),比如對新的數(shù)據(jù)去進行處理,那么,怎么處理呢?下面給大家進行一個詳細的解答。 1:實時向csv文件寫入數(shù)據(jù) 假設(shè)需要生成一張csv表,里面的字段對應(yīng)一些數(shù)據(jù),由于后續(xù)的...
摘要:出于安全考慮,無法直接調(diào)用寫文件到磁盤,但是卻可以通過下載來變相實現(xiàn)保存功能。生成文件并下載是一種逗號分隔的表格文件格式,可以很好的被支持,由于其文件格式簡單,所以經(jīng)常用在簡單的表格上面。 出于安全考慮,JS無法直接調(diào)用FileAPI寫文件到磁盤,但是卻可以通過下載來變相實現(xiàn)保存功能。JS要實現(xiàn)下載功能,一般都是這么幾個過程:生成下載的URL,動態(tài)創(chuàng)建一個A標簽,并將其href指向生成...
閱讀 1538·2021-09-28 09:44
閱讀 2606·2021-09-28 09:36
閱讀 1350·2021-09-08 09:35
閱讀 2045·2019-08-29 13:50
閱讀 893·2019-08-29 13:29
閱讀 1221·2019-08-29 13:15
閱讀 1787·2019-08-29 13:00
閱讀 3092·2019-08-26 16:16