PHP批量刪除、清除UTF-8文件BOM頭的代碼實(shí)例
記得運(yùn)行代碼前先把文件備份一下哦,避免出現(xiàn)失敗問(wèn)題。
代碼一:
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.");
}
代碼二:
<?php
header('content-Type: text/html; charset=utf-8');
if(isset($_GET['dir'])){ //設(shè)置文件目錄,如果沒(méi)有設(shè)置,則自動(dòng)設(shè)置為當(dāng)前文件所在目錄
$basedir=$_GET['dir'];
}else{
$basedir='.';
}
$auto=1;/*設(shè)置為1標(biāo)示檢測(cè)BOM并去除,設(shè)置為0標(biāo)示只進(jìn)行BOM檢測(cè),不去除*/
echo '當(dāng)前查找的目錄為:'.$basedir.'當(dāng)前的設(shè)置是:';
echo $auto?'檢測(cè)文件BOM同時(shí)去除檢測(cè)到BOM文件的BOM<br />':'只檢測(cè)文件BOM不執(zhí)行去除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并已自動(dòng)去除</font>');
}else{
return (' <font color=red>找到BOM</font>');
}
}else{
return (' 沒(méi)有找到BOM');
}
}
function rewrite($filename,$data){
$filenum=fopen($filename,'w');
flock($filenum,LOCK_EX);
fwrite($filenum,$data);
fclose($filenum);
}
?>
代碼三:
##把該文件放在需求去除BOM頭的目錄下跑一下卻可。
<?php
if (isset ( $_GET ['dir'] )) { // config the basedir
$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" ) . " <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) { // BOM
// 的前三個(gè)字符的ASCII
// 碼分別為
// 239
// 187
// 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 );
}
?>
二、Python
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import os
def delBOM():
file_count = 0
bom_files = []
for dirpath, dirnames, filenames in os.walk('.'):
if(len(filenames)):
for filename in filenames:
file_count += 1
file = open(dirpath + "/" + filename, 'r+')
file_contents = file.read()
if(len(file_contents) > 3):
if(ord(file_contents[0]) == 239 and ord(file_contents[1]) == 187 and ord(file_contents[2]) == 191):
bom_files.append(dirpath + "/" + filename)
file.seek(0)
file.write(file_contents[3:])
print bom_files[-1], "BOM found. Deleted."
file.close()
print file_count, "file(s) found.", len(bom_files), "file(s) have a bom. Deleted."
if __name__ == "__main__":
delBOM()
為了方便大家使用,這里腳本之家小編分享一個(gè)BOM工具方便大家檢測(cè)。
下載地址:http://www.dhdzp.com/softs/496779.html
- php中json_encode UTF-8中文亂碼的更好解決方法
- php中文亂碼怎么辦如何讓瀏覽器自動(dòng)識(shí)別utf-8
- PHP頁(yè)面轉(zhuǎn)UTF-8中文編碼亂碼的解決辦法
- php的mail函數(shù)發(fā)送UTF-8編碼中文郵件時(shí)標(biāo)題亂碼的解決辦法
- php smarty截取中文字符亂碼問(wèn)題?gb2312/utf-8
- php截取utf-8中文字符串亂碼的解決方法
- php自動(dòng)識(shí)別文件編碼并轉(zhuǎn)換為UTF-8的方法
- PHP實(shí)現(xiàn)UTF-8文件BOM自動(dòng)檢測(cè)與移除實(shí)例
- PHP iconv 解決utf-8和gb2312編碼轉(zhuǎn)換問(wèn)題
- PHP如何實(shí)現(xiàn)Unicode和Utf-8編碼相互轉(zhuǎn)換
- PHP讀取文件,解決中文亂碼UTF-8的方法分析
相關(guān)文章
PHP寫(xiě)微信公眾號(hào)文章頁(yè)采集方法
給大家分析一下如何用PHP寫(xiě)出采集微信公眾號(hào)文章的方法以及代碼詳細(xì)講解,需要的朋友學(xué)習(xí)一下。2017-12-12
php判斷電腦訪問(wèn)、手機(jī)訪問(wèn)的例子
現(xiàn)在使用手機(jī)上網(wǎng)的人越來(lái)越多了,所以手機(jī)用戶給網(wǎng)站帶來(lái)流量也是非??捎^的。但是對(duì)于只適合PC端的網(wǎng)站想讓手機(jī)訪問(wèn),那么體驗(yàn)度一定會(huì)很差,因?yàn)樵撜镜腸ss樣式只適合用電腦瀏覽器訪問(wèn)。2014-05-05
基于PHP的加載類(lèi)操作以及其他兩種魔術(shù)方法的應(yīng)用實(shí)例
下面小編就為大家?guī)?lái)一篇基于PHP的加載類(lèi)操作以及其他兩種魔術(shù)方法的應(yīng)用實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08
詳解PHP中strlen和mb_strlen函數(shù)的區(qū)別
在PHP中,strlen與mb_strlen是求字符串長(zhǎng)度的函數(shù),但是對(duì)于一些初學(xué)者來(lái)說(shuō),如果不看手冊(cè),也許不太清楚其中的區(qū)別2014-03-03
PHP unlink與rmdir刪除目錄及目錄下所有文件實(shí)例代碼
這篇文章主要介紹了PHP unlink與rmdir刪除目錄及目錄下所有文件的實(shí)例代碼,需要的朋友可以參考下2018-02-02
php根據(jù)身份證號(hào)碼計(jì)算年齡的實(shí)例代碼
我們只要知道身份證的生成規(guī)則就可以了,像下面我們從指定位置到多少位就是出日期了,然后我們把日期轉(zhuǎn)成時(shí)間戳然后進(jìn)行加減運(yùn)算就得出了年齡了,下面我們看實(shí)例2014-01-01
一個(gè)PHP實(shí)現(xiàn)的輕量級(jí)簡(jiǎn)單爬蟲(chóng)
這篇文章主要介紹了一個(gè)PHP實(shí)現(xiàn)的輕量級(jí)簡(jiǎn)單爬蟲(chóng),本文總結(jié)了爬蟲(chóng)的一些知識(shí)如爬蟲(chóng)的結(jié)構(gòu)、正則表達(dá)式、其他問(wèn)題等,然后給出了爬蟲(chóng)實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-07-07

