笔记:Windows 服务器PHP环境下出现空白行 &#65279 解决办法

现象:

本来计划在最顶部的导航栏,前面莫名其妙空一行。浏览器查看源码看不出任何问题,按F12打开控制台程序,发现<body>标签下面多了两个&#65279;隐藏字符,导致导航栏前空了1行;

原因:

PHP源文件的编码格式为 UTF8-BOM,导致文件头部被自动添加饿了&#65279;这个隐藏字符会在<?php >之前执行,虽然看不见,但是为占用一行的位置。

解决办法1:

用notepad++ 打开文件,菜单–>编码–>"转为 UTF8 编码”,并保存;
用sublime Text 打开文件,菜单–>文件–>保存编码–>UTF8;
缺点:如果你用框架,比如我用的laravel,不容易找到哪个文件有bom头。

解决办法2:

step1 在你的web程序的根目录下,创建一个PHP文件,命名为 bom.php

内容如下(以下代码来自互联网):

<?php  
//有些php文件由于不小心保存成了含bom头的格式而导致出现一系列的问题。以下是批量清除bom头的代码
if (isset ( $_GET ['dir'] )) { //config the basedir    
    $basedir = $_GET ['dir'];    
} else {    
    $basedir = '.';    
}    
$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) { // BOM 的前三个字符的ASCII 码分别为 239 187 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 );    
}
step2 文件创建完成之后,找到 apache 的配置文件 httpd.conf

项目目录 DocumentRoot 设置为你的web程序的根目录,而非public目录,一般是public的上一级,然后重启 Apache;

为什么要这么做?因为bom.php 只会扫码同层的文件和文件夹,并文件夹内层扫描,这样修改可以确保整个项目的bom头全部被清理掉!
step3 浏览器访问你的bom.php 如:test.com/bom.php

页面执行完毕,恭喜你!所有bom头已经清除。

step4 最后一步,恢复你的DocumentRoot设置,并重启apache。

看看页面是不是正常了!不正常,给我留言,我可以帮你看看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值