去除BOM头问题

BOM头的问题,不算致命性错误,就是在页面顶部出现留白,出现的原因就是编码格式的问题。接下来说一下我的解决方法。

1.第一个非常有用的方法就是哪个页面出先BOM头问题了,找到跳转到这个页面的控制器中的方法,在这个方法最前面加上ob_end_clean().

原理:ob_end_clean — 清空(擦除)缓冲区并关闭输出缓冲。这个BOM头相当于即时输出一些东西。你在要输出模板之前ob_end_clean(),就相当于清除前面的输出,就可以了。一般在控制器方法前面不需要输出任何东西吧,这样就可以达到去除BOM的目的。有没有BOM,加这句都不会影响其它程序运行。

例:

public function message(){

		ob_end_clean();
		
		$mod = M('XXX');		
		$id = $_GET['id'];
		$list = $mod->where('id='.$id)->find();
		$this->assign('list',$list);
		$this->display();
	}
此函数丢弃最顶层输出缓冲区的内容并关闭这个缓冲区。如果想要进一步处理缓冲区的内容,必须在 ob_end_clean()之前调用 ob_get_contents(),因为当调用 ob_end_clean()时缓冲区内容将被丢弃。而且如果此函数失败,将会抛出E_NOTICE异常。


2.第二种是用程序进行递归文件夹目录达到清除所有的文件中的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) { 
     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); 
}




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

millet109

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值