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