美文网首页
PHP一键去除网页BOM属性, 完美解决网页头部空白或乱码问题

PHP一键去除网页BOM属性, 完美解决网页头部空白或乱码问题

作者: peterz博客 | 来源:发表于2018-05-18 13:06 被阅读42次

问题:

模板文件生成html文件之后会在body开头处加入一个可见的控制符&#65279,导致页面头部会出现一个空白行。原因是页面的编码是UTF-8 + BOM。

问题原因:

这种编码方式一般会在windows操作系统中出现,比如windows自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。

它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。对于一般的文件,这样并不会产生什么麻烦。但对于 PHP来说,BOM是个大麻烦。因为PHP并不会忽略BOM,所以在读取、包含或者引用这些文件时,会把BOM作为该文件开头正文的一部分。

根据嵌入式语言的特点,这串字符将被直接执行(显示)出来。由此造成即使页面的 top padding 设置为0,也无法让整个网页紧贴浏览器顶部,因为在html一开头有这3个隐藏字符&#65279!

导致的问题:

1.网站打开空白

2.页面头部出现多余的空白

3.网站出现乱码,如“锘�”

解决方法一:使用编辑器修改文件编码格式

1.选用专业的编辑器,例如 notepad++,sublime,editplus 这样不会自动签名。

2.sublime通过如下操作File -> Save with Encoding -> UTF-8保存后即可去除 bom

3.notepad++选中格式 -> 以 UTF-8 格式编码选项即可去除

解决方法二:使用代码将网站中BOM都清除

然而有的是整个网站中有些文件存在 BOM 属性,由于网站程序的庞大,所以并不可能手动挨个检查排除修复,所以就发现了一个极为好用的 PHP 程序。

!!!通过此段代码可以快速将网站中的bom清除掉

使用方法:复制下面代码到一个新建的 delbom.txt 的文件中,上传到网站根目录,然后将 delbom.txt 改为 delbom.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); 
} 
?>

这是执行效果

delbom

相关文章

  • PHP一键去除网页BOM属性, 完美解决网页头部空白或乱码问题

    问题: 模板文件生成html文件之后会在body开头处加入一个可见的控制符,导致页面头部会出现一个空...

  • PHP问题记录

    问题1 PHP取json头部有乱码锘縶 导致json无法解析解决方法:BOM问题,如果是文件,改为utf-8无BO...

  • 前端基础问题

    网页乱码的问题是如何产生的?怎样解决 网页乱码主要是因为浏览器对HTML网页的编码解释错误,HTML文件保存的编码...

  • 前端学习任务四

    问答 网页乱码的问题是如何产生的?怎样解决? 网页乱码的问题是如何产生的? 网页文件从写入到展开的四个步骤分别为1...

  • html相关知识——网页乱码问题,严格模式和混杂模式

    网页乱码问题的原因及解决办法网页产生乱码的根本原因:文件保存的编码格式和浏览器解析时的编码格式不匹配; 解决乱码问...

  • HTML基础知识-乱码、颜色表示方法、meta的作用及常见浏览器

    1.网页乱码的问题是如何产生的?怎样解决 ?a、保存时的编码方式与打开时的解码方式不统一会导致网页乱码;b、解决方...

  • HTML-1

    1、网页乱码的问题是如何产生的?怎样解决? i.网页乱码是因为写入网页时所保存的编码格式与浏览器解析时所用的解码格...

  • 解决网页返回乱码问题

    使用urllib爬一个页面,返回类型是gzip,解析返回是byte类型,使用gzip转码后也还是报错,奇怪了,对于...

  • 任务4-html1

    1. 网页乱码的问题是如何产生的?如何解决? 网页乱码是保存html文件的时候的编码模式和解析html文件时候的编...

  • HTML基础问题搜集及解决

    HTML基础问题搜集及解决 1. 网页乱码是如何产生的,怎么解决? 答:我们浏览的网页是浏览器解析html文件呈现...

网友评论

      本文标题:PHP一键去除网页BOM属性, 完美解决网页头部空白或乱码问题

      本文链接:https://www.haomeiwen.com/subject/qhhgdftx.html