A-A+
利用PHP程序清除网页的BOM头问题
大家都知道,使用记事本等部分工具在写php文件,如果文件中使用到session、header等php内置的函数时,要求这些语句之前必须不能有空格、回车、echo输出语句、html标记等,否则页面回给出警告,并且提示 这些语句之前有输出~,错误信息就不贴出来了,总之好多同学遇到这种问题,总是有点不知所措 ,有的同学检查代码后发现这些语句前没有上述我们提及到的一些空格、回车、echo输出语句、html标记等,这是怎么回事呢?这就是文件使用utf-8编码保存的时候,有bom标记!
前段时间在网上找这个问题的答案,终于解决,我这里转发出来供大家学习参考,感谢作者。用法是,将下面的代码保存到一个文件,放到项目目录下,通过浏览器访问一下就可以了:
<?php $s=0;//统计成功数 $f=0;//统计失败数 //遍历所有文件 function find_allfile(){ $i="*"; while($file=glob($i)){ foreach($file as $s){ if(!is_dir($s))$allfile[]=$s; } $i.="\*"; } return $allfile; } //清除BOM标记 function del_bom(){ global $s,$f; $file=find_allfile(); foreach($file as $fname){ $fname=dirname(__FILE__)."\\".$fname; $filecont=@file_get_contents($fname); $bom=substr($filecont,0,3); $bom=bin2hex($bom); if($bom=="efbbbf"){ //判断文件中的前3个字节是否为BOM标记值 $filecont=substr($filecont,3); $result=@file_put_contents($fname,$filecont,LOCK_EX); if($result){ echo "[file] $fname --- --- <em style=\"color:green\">清除成功</em><br />";$s++; }else{ echo " $fname --- --- <em style=\"color:red\">清除失败</em>(文件只读或者被占用)<br />";$f++; } } } } del_bom(); if($s==0 && $f==0){ echo "<p>所有文件正常,没有发现BOM标记。</p>"; }else{ echo "<p>统计结果:清除成功($s) | 清除失败($f)</p>"; } ?>
另一种方法是通过 DW 编辑网页工具进行清除 bom 标记。Ctrl+J调出页面属性,选择左侧,Title/Encoding-->Include Unicode Signature(BOM),如果打勾,将其取消即可。
因为这个问题,困扰了我好长时间,网页最顶端一直有个空白,却找不到原因。