類 似WINDOWS自帶的記事本等軟件,在保存一個(gè)以UTF-8編碼的文件時(shí),會(huì)在文件開(kāi)始的地方插入三個(gè)不可見(jiàn)的字符(_0xEF _0xBB _0xBF,即BOM——Byte Order Mark)。它是一串隱藏的字符,用于讓記事本等編輯器識(shí)別這個(gè)文件是否以UTF-8編碼。對(duì)于一般的文件,這樣并不會(huì)產(chǎn)生什么麻煩。但對(duì)于 PHP來(lái)說(shuō),PHP在設(shè)計(jì)時(shí)就沒(méi)有考慮BOM的問(wèn)題,不會(huì)忽略UTF-8編碼的文件開(kāi)頭BOM的那三個(gè)字符,會(huì)把BOM作為該文件開(kāi)頭正文的一部分。由于必須在<?或者<?php后面的代碼才會(huì)作為PHP代碼執(zhí)行,所以將會(huì)造成在頁(yè)面上輸出這三個(gè)字符,顯示效果就要看瀏覽器了,一般是一個(gè)空行或是一個(gè)亂碼。由于在html一開(kāi)頭有這3個(gè)字符的存在,即使頁(yè)面的 top padding 設(shè)置為0,也無(wú)法讓整個(gè)網(wǎng)頁(yè)緊貼瀏覽器頂部。由于受COOKIE送出機(jī)制的限制,在這些文件開(kāi)頭已經(jīng)有BOM的文件中,COOKIE無(wú)法送出(因?yàn)樵?COOKIE送出前PHP已經(jīng)送出了文件頭),所以登入和登出功能失效。一切依賴COOKIE、SESSION實(shí)現(xiàn)的功能全部無(wú)效。