網路城邦
上一篇 回創作列表 下一篇   字體:
解決網頁開頭出現”嚜”亂碼的方法
2007/07/11 14:23:50 瀏覽3055|回應0|推薦0
同事ascii找到的資料:

解決網頁開頭出現”嚜”亂碼的方法

問題:有時程式執行時會在Source Code或是Http頁面中最上方看到一個”嚜?”的亂碼,有時更多例如下左圖左上角、下右圖Source Code左上角:




發生此種情況常常會導致CSS或是SQL語法無法正常顯示與使用、session,cookies或header等指令不正常動作等情況,此情況是因為Windows之下的Notepad在編寫程式時,若頁面中有中文字或是有任何UTF-8字元時,Notepad會在檔頭部分加入一個BOM標籤來辨別此文件是否為UTF-8格式,但在BIG5等編碼BOM的編碼正好等於”嚜蹂”等字,會導致檔頭出現亂碼且在印出檔頭之前的任何動作都可能出錯。

解決辦法:
1.    不要使用Notepad編寫PHP程式。
2.    利用以下程式碼去除檔案中的BOM檔頭,在有可能的資料夾中都要執行一次此程式。例如將此程式放在html底下並取名為BOMdel.php。
3.    執行http://example.askmorris.org/BOMdel.php

<?
//此文件可自動查詢文件中是否含有BOM,並可自動移除
$basedir="."; //修改此行為需要查詢的目錄 . 為目前的目錄
$auto=1; //是否自動移除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);
}
?>

4.    目前大多數編輯軟體有提供去除BOM的功能,但UltraEdit並沒有自動提供,需要到ini檔uedit32.INI的[Settings]區段自行加入兩行參數如下:

Write UTF-8 BOM = 0 這是在任何時候儲存時都加BOM的設定
Write UTF-8 BOM NF = 0 這是在開新檔的時候加入BOM的設定

UltraEdit的ini檔為uedit32.INI,通常放在windows或WINNT目錄底下。

( 知識學習其他 )
回應 推薦文章 轉寄 列印 加入我的文摘
上一篇 回創作列表 下一篇  

引用
引用網址:http://blog.udn.com/article/trackback.jsp?uid=junesnow17&aid=1083113