字體:小 中 大 |
|
|
|
| 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目錄底下。 |
|
| ( 知識學習|其他 ) |













