技術頻道導航
HTML/CSS
.NET技術
IIS技術
PHP技術
Js/JQuery
Photoshop
Fireworks
服務器技術
操作系統
網站運營

贊助商

分類目錄

贊助商

最新文章

搜索

PHP網頁或生成的網頁開頭一個空行和亂碼字符

作者:admin    時間:2021-8-24 16:0:43    瀏覽:

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

PHP網頁或生成的網頁開頭一個空行和亂碼字符

從表面來看,是內容編碼問題,但是我在用PHP生成網頁時已經嘗試過各種編碼,UTF-8,gb2312,甚至Unicode都用過,問題照舊。

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

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

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

再換,UTF-8 BOM,咦!竟然沒問題了!這是咋回事?我一直用UTF-8都不行,用這個UTF-8 BOM竟然可以了?。?/p>

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

但是現在我想我有必要去了解一下了。

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

先看圖


(點擊圖片放大)

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


(點擊圖片放大)

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

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

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

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

PHP與BOM的問題

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

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

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

現在各種各樣的編輯器,保存文件時如何選擇編碼格式,也是一大問題,如果選擇不對,那么可能對程序的運行就會產生影響,EditPlus保存選utf-8 bom就是文本文件保存時的utf-8。

標簽: 亂碼  UTF-8  BOM  
相關文章
    x