php文件去掉65279空行的各种方法

PHP开发中  有的时候遇到页面顶部多出一行空白,审查元素发现头部有一行  。这是因为使用了utf8带Bom编码保存文件。

关于php隐形字符&#65279解释如下:

UTF-8 编码的文件可以分为无 BOM 和 BOM 两种格式。

何谓BOM?

  •   "EF BB BF" 这三个字节就叫BOM,全称是"Byte Order Mard"。在utf8文件中常用BOM来表明这个文件是UTF-8文件,而BOM的本意是在utf16中用。
  •   utf-8文件在php中输出的时候bom是会被输出的,所以要在php中使用utf-8,必须要是使用不带bom头的utf-8文件。
  •   常用的文本编辑软件对utf-8文件保存的支持方式并不一样,使用的时候要特别留意。

解决方法就是将文件使用utf8无bom编码格式重新保存。

方法一:使用各种文本编辑器,如notepad++,sublime,phpstorm等另存文件为utf-8无BOM

方法二:如果文件比较多,可以去网上找一个清除bom的批处理,保存后上传到目录并运行,设定你要清除BOM的根目录(会自动扫描所有子目录和文件),代码如下:

<?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") . " 
";
                } 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 found, automatically removed.");
        } else {
            return ("BOM found.");
        }
    } else
        return ("BOM Not Found.");
}
function rewrite($filename, $data)
{
    $filenum = fopen($filename, "w");
    flock($filenum, LOCK_EX);
    fwrite($filenum, $data);
    fclose($filenum);
}
?>

方法三:若是无法解决,有一个傻办法,可以在渲染模板之前,先ob_clean();比如在$this->dispay();方法中最前面加入ob_clean();

方法四:如果以上方法不管用,那么用终极方法,把以下代码添加到<head></head>里面

<script text/javascript="">
var a=document.body.innerHTML;
document.body.innerHTML=a.replace(/\ufeff/g,'')
</script>

方法五:如果所有方法皆无效,试着调整下生成代码的位置,分离下前后端代码试试看,或许就可以了。

代码 2021-06-15 16:47:46 通过 网页 浏览(1985)

共有0条评论!

发表评论