//このファイルは、UTF8 でエンコードされたファイルに BOM が追加されており、自動的に削除できるかどうかを迅速にテストするために使用されます
$basedir="."; //この動作のために検出する必要があるディレクトリを変更します
$auto=1; // 検出された BOM 情報を自動的に削除するかどうか。 1 ははい、0 はいいえを意味します。
//以下は変更する必要はありません
if ($dh = opendir($basedir)) {
while (($file = readdir($dh)) !== false) {
if ($file!='.' && $file!='..' && !is_dir($basedir."/".$file)) echo "ファイル名: $file ".checkBOM("$basedir/$file" )." ";
}
closedir($dh);
}
関数 checkBOM ($filename) {
グローバル $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 が見つかりました。自動的に削除されました。");
} else {
Return ("BOM が見つかりました。");
}
}
else return (「BOM が見つかりません。」);
}
関数書き換え ($filename, $data) {
$filenum=fopen($filename,"w");
群れ($filenum,LOCK_EX);
fwrite($filenum,$data);
fclose($filenum);
}
//終わり
?>
例 3
コードは次のとおりです |
コードをコピー |
//BOM をクリアするルート ディレクトリを設定します (すべてのサブディレクトリとファイルが自動的にスキャンされます)
$HOME = ディレクトリ名(__FILE__);
// Windows システムの場合は、次のように変更します: $WIN = 1;
$WIN = 0;
?>
<頭>
UTF8 BOM クリーナー
<スタイル>
ボディ { フォントサイズ: 10px; フォントファミリー: Arial、Helvetica、サンセリフ; 背景: #FFF;
.FOUND { カラー: #F30; フォントの太さ: 太字;
スタイル>
$BOMBED = array();
再帰フォルダー($HOME);
echo 'これらのファイルには UTF8 BOM がありましたが、クリーンアップしました:';
foreach ($BOMBED as $utf) { echo $utf ." n";
エコー ' ';
// 再帰スキャン
関数 RecursiveFolder($sHOME) {
グローバル $BOMBED、$WIN;
$win32 = ($WIN == 1) "" : "/";
$folder = dir($sHOME);
$foundfolders = array();
while ($file = $folder->read()) {
if($file != "." and $file != "..") {
If(ファイルタイプ($sHOME . $win32 . $file) == "ディレクトリ"){
$foundfolders[count($foundfolders)] = $sHOME . $win32 .
} その他 {
$content = file_get_contents($sHOME . $win32 . $file);
$BOM = 検索BOM($content);
If ($BOM) {
$BOMBED[count($BOMBED)] = $sHOME . $win32 .
//BOM 情報を削除します
$content = substr($content,3);
//元のファイルに書き戻す
File_put_contents($sHOME . $win32 . $file, $content);
}
}
}
}
$folder->close();
if(count($foundfolders) > 0) {
foreach ($foundfolders を $folder として) {
RecursiveFolder($folder, $win32);
}
}
}
// 現在のファイルに BOM があるかどうかを検索します
関数 SearchBOM($string) {
if(substr($string,0,3) == Pack("CCC",0xef,0xbb,0xbf)) return true;
false を返します。
}
?>
| |