包含php檢查bom頭信息的詞條

本文目錄一覽:

如何使用PHP批量去除文件UTF8 BOM信息

原理:

UTF8文件,微軟為了增加一個識別信息,有了BOM這個東西:BOM —— Byte Order Mark,缺省在Windows等平台上編輯的UTF8文件會在頭部增加3個位元組的標記信息,我們PHP引擎在處理的時候會完整讀取整個PHP代碼文檔, 如果PHP文件頭部包含BOM信息,就會輸出一個空白,在很多時候會帶來問題,比如我們session無法工作、cookie無法設置等等問題。

解決方法:

把頭部BOM的3個位元組信息識別出來,然後剔除掉。不過一般情況我們不知道哪個文件有BOM,或者是有很多文件,這個時候,就需要進行批量處理了,下面代碼主要就是展現了批量處理的情況,應該會對大家工作中有幫助。

執行方法:

設置一個路徑,然後直接執行就行。

複製代碼 代碼如下:

?php

// 設定你要清除BOM的根目錄(會自動掃描所有子目錄和文件)

$HOME = dirname(__FILE__);

// 如果是Windows系統,修改為:$WIN = 1;

$WIN = 0;

?

!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “”

html xmlns=””

head

meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ /

titleUTF8 BOM 清除器/title

style

body { font-size: 10px; font-family: Arial, Helvetica, sans-serif; background: #FFF; color: #000; }

.FOUND { color: #F30; font-size: 14px; font-weight: bold; }

/style

/head

body

?php

$BOMBED = array();

RecursiveFolder($HOME);

echo ‘h2These files had UTF8 BOM, but i cleaned them:/h2p class=”FOUND”‘;

foreach ($BOMBED as $utf) { echo $utf .”br /n”; }

echo ‘/p’;

// 遞歸掃描

function RecursiveFolder($sHOME) {

global $BOMBED, $WIN;

$win32 = ($WIN == 1) ? “” : “/”;

$folder = dir($sHOME);

$foundfolders = array();

while ($file = $folder-read()) {

if($file != “.” and $file != “..”) {

if(filetype($sHOME . $win32 . $file) == “dir”){

$foundfolders[count($foundfolders)] = $sHOME . $win32 . $file;

} else {

$content = file_get_contents($sHOME . $win32 . $file);

$BOM = SearchBOM($content);

if ($BOM) {

$BOMBED[count($BOMBED)] = $sHOME . $win32 . $file;

// 移出BOM信息

$content = substr($content,3);

// 寫回到原始文件

file_put_contents($sHOME . $win32 . $file, $content);

}

}

}

}

$folder-close();

if(count($foundfolders) 0) {

foreach ($foundfolders as $folder) {

RecursiveFolder($folder, $win32);

}

}

}

// 搜索當前文件是否有BOM

function SearchBOM($string) {

if(substr($string,0,3) == pack(“CCC”,0xef,0xbb,0xbf)) return true;

return false;

}

?

/body

/html

望採納。

PHP批量刪除、清除UTF-8文件BOM頭的代碼實例

記得運行代碼前先把文件備份一下哦,避免出現失敗問題。

代碼一:

複製代碼

代碼如下:

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=redBOM

found,

automatically

removed./font”);

}

else

{

return

(“font

color=redBOM

found./font”);

}

}

else

return

(“BOM

Not

Found.”);

}

代碼二:

複製代碼

代碼如下:

?php

header(‘content-Type:

text/html;

charset=utf-8′);

if(isset($_GET[‘dir’])){

//設置文件目錄,如果沒有設置,則自動設置為當前文件所在目錄

$basedir=$_GET[‘dir’];

}else{

$basedir=’.’;

}

$auto=1;/*設置為1標示檢測BOM並去除,設置為0標示只進行BOM檢測,不去除*/

echo

‘當前查找的目錄為:’.$basedir.’當前的設置是:’;

echo

$auto?’檢測文件BOM同時去除檢測到BOM文件的BOMbr

/’:’只檢測文件BOM不執行去除BOM操作br

/’;

checkdir($basedir);

function

checkdir($basedir){

if($dh=opendir($basedir)){

while

(($file=readdir($dh))

!==

false){

if($file

!=

‘.’

$file

!=

‘..’){

if(!is_dir($basedir.’/’.$file)){

echo

‘文件:

‘.$basedir.’/’.$file

.checkBOM($basedir.’/’.$file).’

br’;

}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

(‘

font

color=red找到BOM並已自動去除/font’);

}else{

return

(‘

font

color=red找到BOM/font’);

}

}else{

return

(‘

沒有找到BOM’);

}

}

function

rewrite($filename,$data){

$filenum=fopen($filename,’w’);

flock($filenum,LOCK_EX);

fwrite($filenum,$data);

fclose($filenum);

}

?

php檢測文件是否有bom頭代碼

?php

/*檢測並清除BOM*/

if(isset($_GET[‘dir’])){

    $basedir=$_GET[‘dir’];

}else{

    $basedir = ‘.’;

}

$auto = 1;

checkdir($basedir);

function checkdir($basedir){

    if($dh = opendir($basedir)){

        while(($file = readdir($dh)) !== false){

            if($file != ‘.’  $file != ‘..’){

                if(!is_dir($basedir.”/”.$file)){

                    echo “filename: $basedir/$file “.checkBOM(“$basedir/$file”).” “;

                }else{

                    $dirname = $basedir.”/”.$file;

                    checkdir($dirname);

                }

            }

        }//end while

    closedir($dh);

    }//end if($dh

}//end function

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=redBOM found, automatically removed./font”;

        }else{

            return (“font color=redBOM found./font”);

        }

    }

    else return (“BOM Not Found.”);

}//end function

function rewrite($filename, $data){

    $filenum = fopen($filename, “w”);

    flock($filenum, LOCK_EX);

    fwrite($filenum, $data);

    fclose($filenum);

}//end function

?

檢測文件是否有bom頭

方法一:用Ultraedit或Editplus打開PHP文件,另存為無Bom的utf-8文件方法二:用Dreamweaver去除Bom頭

菜單–修改–頁面屬性 或者ctrl+j打開頁面屬性窗口,點選「標題/編碼」去掉「包括Unicode簽名Bom」前的勾

有Bom的文件太多?這樣太麻煩?當然有更好的方法!方法三:用php文件批量去除bom頭 將以下這段代碼保存為php文件,上傳到服務器,用瀏覽器訪問它!?phpif (isset($_GET[‘dir’])){ //設置文件目錄

$basedir=$_GET[‘dir’];}else{$basedir = ‘.’;}$auto = 1;checkdir($basedir);

function checkdir($basedir){

if ($dh = opendir($basedir)) {

while (($file = readdir($dh)) !== false) {

if ($file != ‘.’ $file != ‘..’){

if (!is_dir($basedir./.$file)) {

echo filename: $basedir/$file .checkBOM($basedir/$file). ;}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 (font color=redBOM found, automatically removed./font);} else {return (font color=redBOM found./font);}}else return (BOM Not Found.);}function rewrite ($filename, $data) {

$filenum = fopen($filename, w);

flock($filenum, LOCK_EX);

fclose($filenum);}?還用記事本保存?那你真是智商捉急了!

原創文章,作者:YUUSK,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/329542.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
YUUSK的頭像YUUSK
上一篇 2025-01-14 18:55
下一篇 2025-01-14 18:55

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • Java 監控接口返回信息報錯信息怎麼處理

    本文將從多個方面對 Java 監控接口返回信息報錯信息的處理方法進行詳細的闡述,其中包括如何捕獲異常、如何使用日誌輸出錯誤信息、以及如何通過異常處理機制解決報錯問題等等。以下是詳細…

    編程 2025-04-29
  • 使用Python爬蟲獲取電影信息的實現方法

    本文將介紹如何使用Python編寫爬蟲程序,來獲取和處理電影數據。需要了解基本的Python編程語言知識,並使用BeautifulSoup庫和Requests庫進行爬取。 一、準備…

    編程 2025-04-28
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • Python爬取網頁信息

    本文將從多個方面對Python爬取網頁信息做詳細的闡述。 一、爬蟲介紹 爬蟲是一種自動化程序,可以模擬人對網頁進行訪問獲取信息的行為。通過編寫代碼,我們可以指定要獲取的信息,將其從…

    編程 2025-04-28
  • 如何使用Python執行Shell命令並獲取執行過程信息

    本文將介紹如何使用Python執行Shell命令並獲取執行過程信息。我們將從以下幾個方面進行闡述: 一、執行Shell命令 Python內置的subprocess模塊可以方便地執行…

    編程 2025-04-28
  • Python實現身份信息模擬生成與查驗

    本文將從以下幾個方面對Python實現身份信息模擬生成與查驗進行詳細闡述: 一、身份信息生成 身份信息生成是指通過代碼生成符合身份信息規範的虛假數據。Python中,我們可以使用f…

    編程 2025-04-27
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若服務器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • Dapper使用getschema獲取表信息

    本文旨在介紹Dapper中使用getschema獲取表信息的方法和注意事項。 一、獲取某張表的所有列信息 使用Dapper獲取某張表信息,可以使用 `IDbConnection.G…

    編程 2025-04-27

發表回復

登錄後才能評論