PHP批量清除bom头

关于BOM:

为了识别 Unicode 文件,Microsoft 建议所有的 Unicode 文件应该以 ZERO WIDTH NOBREAK SPACE(U+FEFF)字符开头。这作为一个“特征符”或“字节顺序标记(byte-order mark,BOM)”来识别文件中使用的编码和字节顺序。

Linux/UNIX 并没有使用 BOM,因为它会破坏现有的 ASCII 文件的语法约定。 (-- 这就是导致这次页面出现空白行的原因)

dom不是好东西就是一个数据签名,一串字符串而已,经常导致页面出现空白行,特别是PHP进行文件引入require_once和include的时候

在需要清除bom的时候,把下面代码保存为一个php文件放到网站根目录去运行即刻把bom清除掉

':'只检测文件BOM不执行去除BOM操作
'; 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).'
'; }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 (' 找到BOM并已自动去除'); }else{ return (' 找到BOM'); } }else{ return (' 没有找到BOM'); } } function rewrite($filename,$data){ $filenum=fopen($filename,'w'); flock($filenum,LOCK_EX); fwrite($filenum,$data); fclose($filenum); } ?>


你可能感兴趣的:(PHP)