PHP动态加载html文件之后<head>中内容全部移动到<body>中导致页面头部存在空白

        单独查看HTML文档,文件内容与结构均正常,无错误。但是访问相应的PHP文件时,<head>中的样式,脚本,meta标签全部移动到<body>里,并且在这些标签前还有空行;网上还是许多人遇到了这个问题,解决的方法也有好多,网上有问题说,是HTML文档中标签不闭合,也有说是PHP文件中include的问题。但是感觉都不是关键所在。
        后来在CSDN中找到一篇文章,介绍了这个问题,按照这个问题的解决思路,我最终很方便地就解决了这个问题。

        首先,问题的原因是UTF-8的BOM。是微软这家人的文本编辑器默认会给使用记事本打开的文档头部添加的一个标签(使用其他的编辑器就不会出现这种情况),这样子会使得浏览器在解析的时候出现如上情况。

        如何查看文档有没有BOM存在呢?使用dreamweaver打开文档,然后菜单栏->修改->页面属性->标签->标签/编码,看选项卡中是否有勾选“包括Unicode签名“一项。

        但是,我也不清楚我的文档哪个被我手贱使用windows的文本编辑器编辑过,一个一个找又麻烦,所以这里提供我在网上找到的一个php文档,将他保存为php然后放在你所要清理的文件目录的根目录,然后使用浏览器访问这个文件,就会自动清楚该目录树下所有具有BOM的文档的头部标记。亲测有效。

<?php 
$basedir = str_replace('/clearBOM.php','',str_replace('\\','/',dirname(__FILE__)));
$auto = 1;
checkdir($basedir);
function checkdir($basedir){
	if ($dh = opendir($basedir)) {
		while (($file = readdir($dh)) !== false) {
			if ($file != '.' && $file != '..'){
				if (!is_dir($basedir.'/'.$file)) {
					$filename = $basedir.'/'.$file;
					echo 'filename:'.$basedir.'/'.$file.checkBOM($filename).'<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);
}
?>

            以上PHP无需进行任何修改。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值