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