批量清除BOM(PHP文件头的空白行)
2013-01-15 16:42
465 查看
BOM: Byte Order Mark
UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行.
类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)
PHP的生成图片函数(imagepng(), imagegif(), imagewbmp(), imagejpeg() 和 imagetypes())的文件或者相关的引入文件包含BOM,会导致生成发生错误,常见的如Discuz的验证码生成程序。
以下是PHP代码
<?php
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")." <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 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);
}
?>
UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行.
类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)
PHP的生成图片函数(imagepng(), imagegif(), imagewbmp(), imagejpeg() 和 imagetypes())的文件或者相关的引入文件包含BOM,会导致生成发生错误,常见的如Discuz的验证码生成程序。
以下是PHP代码
<?php
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")." <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 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);
}
?>
相关文章推荐
- PHP批量删除、清除UTF-8文件BOM头的代码实例
- PHP批量删除、清除UTF-8文件BOM头的代码实例
- 批量去除PHP文件中bom的PHP代码
- 批量去除PHP文件中bom的PHP代码
- 批量清除和检测bom的php代码
- PHP批量去除PHP文件中bom的代码
- PHP检测并清除文件开头的BOM
- php 清除文件的Bom
- PHP批量去除文件头部Bom信息
- php 批量检测bom头,去除bom头工具
- 檢查php文件中是否含有bom的php文件
- PHP实现批量重命名某个文件夹下所有文件的方法
- [置顶] 文件批量命名之PHP篇 -- 把PHP取代批处理文件
- PHP文件上传类,包含批量上传
- 批量除去php页面的bom,页面meta跑到body中就是这个问题
- PHP/ThinkPHP实现批量打包下载文件的方法示例
- js 解决由于(bom文件格式)产生的空白行
- 使用PHP遍历文件目录与清除目录中文件的实现详解
- php文件第一行有多余字符,css文件第一行不起作用,bom头在作怪