首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 一鍵清除專案中所有檔案的 BOM 頭終極解決方案

     編輯:PHP 相關知識

UTF-8 BOM(Byte Order Mark)會導致 PHP 輸出異常、Session 失效、header 已發送等詭異問題。本文提供一個可遞迴掃描目錄、自動檢測並移除 BOM 的完整 PHP 腳本,使用前請務必備份代碼。

核心原理

  • BOM 為 UTF-8 檔案開頭的 3 個位元組:EF BB BF(十進位 239, 187, 191)
  • 讀取檔案前 3 位元組,匹配即移除並覆寫
  • 遞迴掃描子目錄,跳過 . 和 ..

完整可執行代碼

<?php
$path = dirname(__FILE__);
scandDir($path);

function bomtoutf8($filename) {
    $ef = 239; $bb = 187; $bf = 191;
    
    if (is_dir($filename)) return;
    $fd = fopen($filename, "rb");
    if (!$fd) exit($filename);
    $headers = fread($fd, 3);
    fclose($fd);
    if (strlen($headers) < 3) return;

    if (ord($headers[0]) == $ef && ord($headers[1]) == $bb && ord($headers[2]) == $bf) {
        echo $filename, "\n";
        $content = file_get_contents($filename);
        if (!$content) exit("file get contents failed");
        $len = strlen($content);
        $content = substr($content, 3);
        if ($content === false && $len != 3) exit("substr failed");
        elseif ($content === false && $len == 3) $content = "";
        
        $ret = file_put_contents($filename, $content, LOCK_EX);
        if ($ret === false) exit("file put contents failed");
        echo "successed file $filename\n";
    }
}

function scandDir($path) {
    $d = dir($path);
    if (!$d) exit("dir failed");
    while (false !== ($entry = $d->read())) {
        if ($entry == '.' || $entry == '..') continue;
        $filename = $path . DIRECTORY_SEPARATOR . $entry;
        if (is_dir($filename)) {
            scandDir($filename);
        } else {
            bomtoutf8($filename);
        }
    }
}
?>

使用說明

  1. 將腳本存為 remove_bom.php 放入專案根目錄
  2. 瀏覽器訪問或 CLI 執行:php remove_bom.php
  3. 終端輸出每個被清理的檔案路徑與 successed 提示
  4. 執行完成後重新整理專案,BOM 相關問題即可解決

⚠️ 重要提醒

  • 執行前務必完整備份專案代碼
  • 二進位檔案(圖片、壓縮包等)誤判風險極低,但建議排除 vendor/、.git/、storage/ 等目錄
  • IDE 另存新檔時勾選「UTF-8 無 BOM」可從源頭杜絕
  • 現代框架(Laravel、Symfony、ThinkPHP 6+)啟動檔已內建 BOM 容錯,但舊專案仍需清理

一鍵根治 BOM 麻煩,還你乾淨的 UTF-8 編碼環境。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved