怎麼去掉utf-8 的bom頭?

來源:互聯網
上載者:User
Google,360瀏覽器,QQ瀏覽器中網頁頂部有bom頭;Firefox瀏覽器顯示正常。
我試了好多種辦法(Dreamweaver,Notepad++,網上搜了個去除bom的程式檔案),最終還是沒能解決,請問各位大神還有什麼辦法嗎?

這是Google瀏覽器中顯示bom圖的部分:


回複討論(解決方案)

檔案本身有漢字的,直接另存新檔 無BOM urf-8 編碼
檔案本身沒有漢字的,直接另存新檔 ANSI 編碼

從多語言版考慮,程式檔案中是不應該之間特定語種的文字的。而是在運行時刻通過字典充填內容的

檔案本身有漢字的,直接另存新檔 無BOM urf-8 編碼
檔案本身沒有漢字的,直接另存新檔 ANSI 編碼

從多語言版考慮,程式檔案中是不應該之間特定語種的文字的。而是在運行時刻通過字典充填內容的



我就是用編輯器儲存為無bom的utf-8編碼,還是不行,但是在Firefox瀏覽器中就正常。這是為什嗎?

所有相關的檔案都做了嗎?

不是所有的瀏覽器都能忽略 BOM 頭的

如果安裝了netbeans,用它開啟檔案,
如果檔案有bom頭,會在第一行最前面 顯示一個小點,刪除這個小點,儲存就可以了

所有相關的檔案都做了嗎?

不是所有的瀏覽器都能忽略 BOM 頭的



這是我的程式
";                  }else{ $dirname = $basedir."/".$file;                      checkdir($dirname);                  }              }          }      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 ("BOM found, automatically removed.");          } else { return ("BOM found.");          }      }  else return ("BOM Not Found."); } function rewrite ($filename, $data) {$filenum = fopen($filename, "w");      flock($filenum, LOCK_EX);      fwrite($filenum, $data);      fclose($filenum); }

我用這個去除bom也不行

你這個程式對刪除 utf-8 BOM 是有效

你可以這樣看看

$s = file_get_contents('http://localhost');echo bin2hex($s);
貼出輸出的前20個字元

你這個程式對刪除 utf-8 BOM 是有效

你可以這樣看看

$s = file_get_contents('http://localhost');echo bin2hex($s);
貼出輸出的前20個字元


這段代碼放在bom程式檔案裡還是?

從你的上看,有  字樣
這應該是 unicode 的 BOM 頭,要判斷檔案的頭2個字元的內碼值是否是 255 和 254

那段代碼單獨現在一個程式裡,執行

從你的上看,有  字樣
這應該是 unicode 的 BOM 頭,要判斷檔案的頭2個字元的內碼值是否是 255 和 254


輸出從第一個開始

那段代碼單獨現在一個程式裡,執行


這個是單獨執行的

你 #10 的中有 3 個 utf-8 BOM
你 #11 的中沒有 BOM

你 #10 的中有 3 個 utf-8 BOM
你 #11 的中沒有 BOM



看不懂,咋解決了

要去掉所有先關檔案中的 bom
你的那個程式放的位置很重要,再說你可能還引用了網站外的檔案

要去掉所有先關檔案中的 bom
你的那個程式放的位置很重要,再說你可能還引用了網站外的檔案

我的bom程式就放在項目根目錄,和其它檔案是兄弟關係。

如果你將項目中的檔案的 bom 都去除了,頁面中卻還有 bom 存在的話
那麼就表示你還使用了項目以外的檔案

如果你將項目中的檔案的 bom 都去除了,頁面中卻還有 bom 存在的話
那麼就表示你還使用了項目以外的檔案


找的我都頭大了,還是找不出來,謝謝你了

那你就把 bom程式 放到網站的根上運行

那你就把 bom程式 放到網站的根上運行



我懷疑這跟一些js有關係,網站裡有些程式檔案,都是js寫的

難道你認為 js 檔案不是 相關檔案 嗎?

難道你認為 js 檔案不是 相關檔案 嗎?




剛我把網站首頁裡那些js代碼去掉了還是不行

難道你認為 js 檔案不是 相關檔案 嗎?


因為這段js中的路徑是hm.src = "//hm.baidu.com/hm.js?54403e32d263feb8a8a2d4a630ccc73f";
誤以為跟它有關

你的網站在公網上嗎?貼出網址來

你的網站在公網上嗎?貼出網址來


http://www.25mj.com/

有 3 個 bom
請貼出 index.php

有 3 個 bom
請貼出 index.php

[東方美居官方網站]中國領先的裝修-建材-家居領域電子商務網站,專業裝修建材傢具消費導購平台                    歡迎來到東方美居建材燈飾廣場                        會員登入                會員註冊                個人中心                                                                             首 頁        找傢具         找建材                 找輔料           美居之家    

太長了,我分開,這是第一部分

有 3 個 bom
請貼出 index.php



總共要6萬多位元組,你說貼哪塊我貼出來

$url = 'http://www.25mj.com/';echo bin2hex(file_get_contents($url, false, null, 0, 20)), PHP_EOL;echo bin2hex(file_get_contents($url . 'inc.php', false, null, 0, 20));

efbbbfefbbbfefbbbf3c21444f43545950452048
efbbbfefbbbf

訪問你的 index.php,返回了 3 個 bom
訪問你的 inc.php,返回了 2個 bom
顯然你的 index.php、inc.php 以及在 inc.php 中 include 的一個檔案中 有 bom

你是怎麼執行你的 去除bom程式 的?
還是只放上去了沒有執行?

$url = 'http://www.25mj.com/';echo bin2hex(file_get_contents($url, false, null, 0, 20)), PHP_EOL;echo bin2hex(file_get_contents($url . 'inc.php', false, null, 0, 20));

efbbbfefbbbfefbbbf3c21444f43545950452048
efbbbfefbbbf

訪問你的 index.php,返回了 3 個 bom
訪問你的 inc.php,返回了 2個 bom
顯然你的 index.php、inc.php 以及在 inc.php 中 include 的一個檔案中 有 bom

你是怎麼執行你的 去除bom程式 的?
還是只放上去了沒有執行?



我的bom程式就在http://www.25mj.com/delete_bom.php 這裡執行的,這裡就是根目錄

$url = 'http://www.25mj.com/';echo bin2hex(file_get_contents($url, false, null, 0, 20)), PHP_EOL;echo bin2hex(file_get_contents($url . 'inc.php', false, null, 0, 20));

efbbbfefbbbfefbbbf3c21444f43545950452048
efbbbfefbbbf

訪問你的 index.php,返回了 3 個 bom
訪問你的 inc.php,返回了 2個 bom
顯然你的 index.php、inc.php 以及在 inc.php 中 include 的一個檔案中 有 bom

你是怎麼執行你的 去除bom程式 的?
還是只放上去了沒有執行?


我執行bom程式,頁面沒有顯示找index.php檔案的bom記錄,難道bom程式沒有執行index.php嗎?

$url = 'http://www.25mj.com/';echo bin2hex(file_get_contents($url, false, null, 0, 20)), PHP_EOL;echo bin2hex(file_get_contents($url . 'inc.php', false, null, 0, 20));

efbbbfefbbbfefbbbf3c21444f43545950452048
efbbbfefbbbf

訪問你的 index.php,返回了 3 個 bom
訪問你的 inc.php,返回了 2個 bom
顯然你的 index.php、inc.php 以及在 inc.php 中 include 的一個檔案中 有 bom

你是怎麼執行你的 去除bom程式 的?
還是只放上去了沒有執行?


目前運行index.php顯示是這樣的

你的程式是怎麼放到伺服器上去的?
你不能在本地處理好以後再上傳嗎?

$url = 'http://www.25mj.com/';echo bin2hex(file_get_contents($url, false, null, 0, 20)), PHP_EOL;echo bin2hex(file_get_contents($url . 'inc.php', false, null, 0, 20));

efbbbfefbbbfefbbbf3c21444f43545950452048
efbbbfefbbbf

訪問你的 index.php,返回了 3 個 bom
訪問你的 inc.php,返回了 2個 bom
顯然你的 index.php、inc.php 以及在 inc.php 中 include 的一個檔案中 有 bom

你是怎麼執行你的 去除bom程式 的?
還是只放上去了沒有執行?



這裡顯示已找到bom,並已清除,但是運行index.php還是有bom。
運行結果如樓上所示。

你的程式是怎麼放到伺服器上去的?
你不能在本地處理好以後再上傳嗎?



我的程式就是在伺服器上改的,我的bom程式也是我ftp傳上去的,然後http://www.25mj.com/delete_bom.php運行。

$url = 'http://www.25mj.com/';
echo bin2hex(file_get_contents($url . 'index.php')), PHP_EOL;
可以見到 3 個 bom
但是你的 http://www.25mj.com/delete_bom.php 的報告中並沒有這個檔案!報告中的 index.php 都在子目錄中

你把 delete_bom.php 中的 rewrite 函數改成這樣:

function rewrite ($filename, $data) {   if($filenum = fopen($filename, "w")) {        if(flock($filenum, LOCK_EX)) {          if(! fwrite($filenum, $data)) echo  "$filename 寫入失敗
"; }else echo "$filename 鎖定失敗
"; fclose($filenum); }else echo "$filename 開啟失敗
"; }
看看是否是沒有改寫成功

你把 delete_bom.php 中的 rewrite 函數改成這樣:

function rewrite ($filename, $data) {   if($filenum = fopen($filename, "w")) {        if(flock($filenum, LOCK_EX)) {          if(! fwrite($filenum, $data)) echo  "$filename 寫入失敗
"; }else echo "$filename 鎖定失敗
"; fclose($filenum); }else echo "$filename 開啟失敗
"; }
看看是否是沒有改寫成功


我改成這個之後運行bom,就顯示
這樣,bom還在。

這就對了!檔案都打不開,怎麼去掉 bom 頭?
你把那些打不開的檔案下載下來,改好後重新傳上去

這就對了!檔案都打不開,怎麼去掉 bom 頭?
你把那些打不開的檔案下載下來,改好後重新傳上去


奧,怪不得了

這就對了!檔案都打不開,怎麼去掉 bom 頭?
你把那些打不開的檔案下載下來,改好後重新傳上去


這是為什麼呢?難道我在伺服器上的許可權還不夠?

檔案是唯讀,就是這樣

你的檔案不僅是在網站管理下,還在 ftp 管理下。這種情況是經常發生的

寫入權限實際是由 ftp 控制的,你可嘗試用 ftp 用戶端修改檔案許可權

寫入權限實際是由 ftp 控制的,你可嘗試用 ftp 用戶端修改檔案許可權



懂了,謝謝了,終於解決了。
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.