日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > php教程 > PHP與Unicode簽名(BOM)

PHP與Unicode簽名(BOM)

來源:程序員人生   發(fā)布時間:2014-04-19 13:07:42 閱讀次數(shù):3306次
在編寫或者修改用UTF-8編碼保存的PHP文件時,有時會莫名其妙出現(xiàn)一些問題:
1. 頁面顯示一個“锘”字,其他一片空白;
2. 不能登入或者不能登出;
3. 頁頂出現(xiàn)一條空白;
4. 頁頂出現(xiàn)錯誤警告;
5. 其它不正常的情況;
6. 生成的圖片瀏覽器無法識別。
分析原因:
 文件以UTF-8編碼保存時,有兩種情情況:帶Unicode簽名(BOM)和不帶Unicode簽名。BOM信息是文件開頭的一串隱藏的字符,用于讓某些編輯器識別這是個UTF-8編碼的文件。

類似WINDOWS自帶的記事本等軟件,在保存一個以UTF-8編碼的文件時,會在文件開始的地方插入三個不可見的字符(0xEF 0xBB 0xBF,即BOM——Byte Order Mark)。它是一串隱藏的字符,用于讓記事本等編輯器識別這個文件是否以UTF-8編碼。對于一般的文件,這樣并不會產(chǎn)生什么麻煩。

但對于 PHP來說,PHP在設(shè)計時就沒有考慮BOM的問題,不會忽略UTF-8編碼的文件開頭BOM的那三個字符,會把BOM作為該文件開頭正文的一部分。由于必須在<?或者<?php后面的代碼才會作為PHP代碼執(zhí)行,所以將會造成在頁面上輸出這三個字符,顯示效果就要看瀏覽器了,一般是一個空行或是一個亂碼。由于在html一開頭有這3個字符的存在,即使頁面的 top padding 設(shè)置為0,也無法讓整個網(wǎng)頁緊貼瀏覽器頂部。由于受COOKIE送出機制的限制,在這些文件開頭已經(jīng)有BOM的文件中,COOKIE無法送出(因為在 COOKIE送出前PHP已經(jīng)送出了文件頭),所以登入和登出功能失效。一切依賴COOKIE、SESSION實現(xiàn)的功能全部無效。

解決辦法:

在編輯、更改任何文本文件時,請務(wù)必使用不會亂加BOM的編輯器。Linux下的編輯器應(yīng)該都沒有這個問題。WINDOWS下,請勿使用記事本等編輯器。推薦的編輯器是:Editplus 2.12版本以上;EmEditor;UltraEdit(需要取消‘添加BOM’的相關(guān)選項);Dreamweaver(需要取消‘添加BOM’的相關(guān)選項)等。

對于已經(jīng)添加了BOM的文件,要取消的話,可以用以上編輯器另存一次。(Editplus需要先另存為gb,再另存為UTF-8。)

ultraedit, editplus, notepad四個工具對UTF-8 的支持不相同,下面是對四個工具對UTF-8 支持的總結(jié):
  UTF-8 BOM header: 是三個字符: EF BB BF。
  1. notepad
notepad 在保存時,選擇UTF-8 格式,會在文件頭寫上BOM header.
  2. editplus
文件保存時,選擇UTF-8 格式,不會在文件頭寫上 BOM header.
  3. ultraedit
ultraedit 對UTF-8 的支持最為完備。在advanced->configuration中可以 選擇文件保存時是否寫上BOM header.
  4. vi
指的是Linux 下的vim, 如果UTF-8 文件開頭有BOM header, 其能夠正常顯示UTF-8編碼,否則,顯示為亂碼。
  還有一些編碼轉(zhuǎn)換工具,比如,可以用java 寫一個簡單的編碼轉(zhuǎn)換工具,這些工具是不會增加BOM header的。

附錄:

UltreEdit的配置,將選項“保存時對所有UTF-8寫入UTF-8文件頭標(biāo)記(BOM)”關(guān)閉。即:Write UTF-8 BOM header to ALL UTF-8 files when saved OFF。
不同版本有可能沒有,而要把“自動檢測utf8”關(guān)掉。這樣看utf8文件就亂碼了。
建議用editplus了。


檢測目錄下文件是否有BOM程序:
<?
//此文件用于快速測試UTF8編碼的文件是不是加了BOM,并可自動移除
//By Bob Shen

$basedir=".";; //修改此行為需要檢測的目錄,點表示當(dāng)前目錄
$auto=0; //是否自動移除發(fā)現(xiàn)的BOM信息。1為是,0為否。

//以下不用改動

if ($dh = opendir($basedir)) {
while (($file = readdir($dh)) !== false) {
if ($file!='.' && $file!='..' && !is_dir($basedir."/".$file)) echo "filename: $file ".checkBOM("$basedir/$file")." <br>";
}
closedir($dh);
}

function checkBOM ($filename) {
global $auto;
$contents=file_get_contents($filename);
$charset[1]=substr($contents, 0, 1);
$charset[2]=substr($contents, 1, 1);
$charset[3]=substr($contents, 2, 1);
if (ord($charset[1])==239 && ord($charset[2])==187 && ord($charset[3])==191) {
if ($auto==1) {
$rest=substr($contents, 3);
rewrite ($filename, $rest);
return ("<font color=red>BOM found, automatically removed.</font>");
} else {
return ("<font color=red>BOM found.</font>");
}
}
else return ("BOM Not Found.");
}

function rewrite ($filename, $data) {
$filenum=fopen($filename,"w");
flock($filenum,LOCK_EX);
fwrite($filenum,$data);
fclose($filenum);
}
?>
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 国产日韩精品一区二区三区 | 中国一级片在线观看 | 日韩综合在线视频 | 中文字幕日韩欧美一区二区三区 | 精品国产凹凸成av人导航 | 亚洲成年人av | 最新三级网址 | 国产一区二区免费在线 | 希岛爱理 在线 | 久久久国产一区二区三区四区小说 | 国产精品永久免费视频 | 久久都是精品 | 欧美999 | 亚洲免费综合 | 日韩精品h| 在线观看麻豆视频 | 久久成人一区二区 | 成人网在线 | 性xxxxx | 天天色天天 | 成年人黄色网址 | 国产一区精品视频 | 99在线免费观看视频 | 国产精品久久久久久久 | 久草视频观看 | 尤物国产| 国产一区二区三区免费看 | 国产精品综合 | 欧美日韩福利视频 | 日韩欧美精品一区二区三区 | 日韩精品免费一区二区在线观看 | 国产高清精品一区二区三区 | 日韩精品一区二区久久 | av天天干 | 日韩欧美在线视频 | wwwxx免费| 中文字幕影院 | 国产精品久久久久久久7电影 | 在线激情 | 91久久久久久 | 亚洲国产精品99久久久久久久久 |