BOM是用来判断文本文件是哪一种Unicode编码的标记,其本身是一个Unicode字符(\uFEFF),位于文本文件头部,BOM本来不影响代码的解析,但是php除外,PHP会解析BOM,会输出在页面里,造成前端有占位发生布局位移,如果不了解的phpBOM就会对这个平白多出来的东西感到莫名其妙。
我们去掉网站php文件里的BOM信息呢
编辑器可以无保存bom文件,utf-8和utf-8withbom,要保存了bom文件php会报错namespace必须是第一行的代码,现在是bom信息是第一行,虽然你看不到但是他就是在第一行
我们怎么样通过代码的形式批量的去掉文件的bom信息
在网站根目录下新建一个nobomb.php的文件,文件的代码为以下内容。主要解决模板多出空的内容、验证码不显示等问题。然后在浏览器直接访问运行nobom.php文件即可。
?ph
if(isset($_GET['dir'])){
$basedir=$_GET['dir'];
}else{
$basedir='.';
}
$auto=1;
checkdir($basedir);
functioncheckdir($basedir){
if($dh=opendir($basedir)){
while(($file=readdir($dh))!==false){
if($file!='.'$file!='..'){
if(!is_dir($basedir./.$file)){
echofilename:$basedir/$file.checkBOM($basedir/$file).br;
}else{
$dirname=$basedir./.$file;
checkdir($dirname);
}
}
}
closedir($dh);
}
}
functioncheckBOM($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])==239ord($charset[2])==187ord($charset[3])==191){
if($auto==1){
$rest=substr($contents,3);
rewrite($filename,$rest);
return(fontcolor=redBOMfound,automaticallyremoved./font);
}else{
return(fontcolor=redBOMfound./font);
}
}elsereturn(BOMNotFound.);
}
functionrewrite($filename,$data){
$filenum=fopen($filename,w);
flock($filenum,LOCK_EX);
fwrite($filenum,$data);
fclose($filenum);
}
运行上面的代码就可以清除文件的bom信息上面的截图看是没有发现带有bom的文件的,有bom的文件会出现字体加红色。去掉后访问网站访问正常