php文件去掉65279空行的各种方法
PHP开发中 有的时候遇到页面顶部多出一行空白,审查元素发现头部有一行 。这是因为使用了utf8带Bom编码保存文件。
关于php隐形字符解释如下:
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条评论!