技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營(yíng)

贊助商

分類目錄

贊助商

最新文章

搜索

PHP網(wǎng)頁(yè)或生成的網(wǎng)頁(yè)開頭一個(gè)空行和亂碼字符

作者:admin    時(shí)間:2021-8-24 16:0:43    瀏覽:

今天用PHP生成網(wǎng)頁(yè),瀏覽時(shí)發(fā)現(xiàn)有些問題,就是開頭總是空一行和出現(xiàn)幾個(gè)亂碼。一開始我以為是程序的問題,但是在逐步排查之后,并不是程序的原因。這就讓人有些疑惑了,一時(shí)還不知從哪入手去解決這個(gè)問題。

PHP網(wǎng)頁(yè)或生成的網(wǎng)頁(yè)開頭一個(gè)空行和亂碼字符

從表面來看,是內(nèi)容編碼問題,但是我在用PHP生成網(wǎng)頁(yè)時(shí)已經(jīng)嘗試過各種編碼,UTF-8,gb2312,甚至Unicode都用過,問題照舊。

通過查閱相關(guān)資料,有可能是PHP文件的保存編碼問題。

我一直用的是Editplus編輯器,保存編碼是UTF-8。

于是我換下保存編碼,ANSI,不行。

再換,UTF-8 BOM,咦!竟然沒問題了!這是咋回事?我一直用UTF-8都不行,用這個(gè)UTF-8 BOM竟然可以了???

我現(xiàn)在還不知這個(gè)帶BOM與不帶BOM的UTF-8有何區(qū)別。

但是現(xiàn)在我想我有必要去了解一下了。

UTF-8 BOM 與 UTF-8 的區(qū)別

先看圖


(點(diǎn)擊圖片放大)

內(nèi)容都一樣 ,為什么相差了3個(gè)字節(jié)呢 ? 再看下圖 。


(點(diǎn)擊圖片放大)

多出來的 ef bb bf 就是上面相差三個(gè)字節(jié)的原因 。

為什么 utf-8 bom 要多這三個(gè)字節(jié)呢 ?

BOM——Byte Order Mark,就是字節(jié)序標(biāo)記。

bom是為utf-16和utf-32準(zhǔn)備的,用于標(biāo)記字節(jié)順序。微軟在utf-8中使用bom是因?yàn)檫@樣可以把UTF-8和ASCII等編碼區(qū)分開來,Windows就是使用BOM來標(biāo)記文本文件的編碼方式的,但這樣的文件在Windows之外的操作系統(tǒng)里會(huì)帶來問題。

PHP與BOM的問題

PHP在設(shè)計(jì)時(shí)就沒有考慮BOM的問題,也就是說它不會(huì)忽略UTF-8編碼的文件開頭BOM的那三個(gè)字符。由于必須在<?或者<?php后面的代碼才會(huì)作為PHP代碼執(zhí)行,所以這三個(gè)字符將會(huì)直接輸出。

如果插件的文件有這個(gè)問題,將會(huì)導(dǎo)致在后臺(tái)頁(yè)面里激活或者不激活插件后顯示白屏,如果是模版文件有這個(gè)問題,將會(huì)導(dǎo)致這三個(gè)字符直接輸出,造成頁(yè)面上方有一個(gè)小空行。——這就解釋了為何我用PHP生成的網(wǎng)頁(yè)開頭有個(gè)空行亂碼了。

國(guó)外的英文插件和模版一般都是用的ASCII碼的編碼方式,不會(huì)有BOM,只有國(guó)內(nèi)的插件和模版會(huì)由于作者的不知情造成問題。還有,大家修改模版的時(shí)候,由于輸出頁(yè)面使用UTF-8編碼,那么修改模版的時(shí)候如果有加入中文字符的話,必須把文件轉(zhuǎn)成UTF-8編碼才能正常顯示,這個(gè)時(shí)候如果所使用的編輯器自動(dòng)加上了BOM的話,將會(huì)造成在頁(yè)面上輸出這三個(gè)字符,顯示效果就要看瀏覽器了,一般是一個(gè)空行或是一個(gè)亂碼。

現(xiàn)在各種各樣的編輯器,保存文件時(shí)如何選擇編碼格式,也是一大問題,如果選擇不對(duì),那么可能對(duì)程序的運(yùn)行就會(huì)產(chǎn)生影響,EditPlus保存選utf-8 bom就是文本文件保存時(shí)的utf-8。

標(biāo)簽: 亂碼  UTF-8  BOM  
相關(guān)文章
    x
    • 站長(zhǎng)推薦
    /* 左側(cè)顯示文章內(nèi)容目錄 */