HTML中head里的内容经浏览器解析后全到body里了

torrychang 2012-04-06 06:49:05
我从linux服务器nginx上把一个网站迁移到windows的IIS上
数据什么的都么有问题,配置好rewrite以后,访问网站,发现样式变动了,网站上方空出了一块
我用chrome浏览器的审查元素一看,发现head里的内容全到Body里了,而且body的最开始出多出了一块带引号的空白!

但是如果右键查看源代码的话,代码是正确的,没有问题!


正常状态


错误状态


求大牛解救
...全文
2362 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
torrychang 2014-11-14
  • 打赏
  • 举报
回复
引用 19 楼 qq_22743879 的回复:
怎么弄,求帮助 我body里也有“”。。。。
复制上面的去除BOM头的代码放到你网站的根目录,然后访问这个文件,就会自动清除网站目录下的所有文件的BOM头
qq_22743879 2014-11-03
  • 打赏
  • 举报
回复
怎么弄,求帮助 我body里也有“”。。。。
qq_20316791 2014-09-02
  • 打赏
  • 举报
回复
楼主好厉害啊! 那为什么会出现BOM了,难道就是保存时出错了么?
zeallag1 2014-04-04
  • 打赏
  • 举报
回复
我的网站有两个页面用ie6到ie8打开都有这个问题,导致页面没有居中。用其他浏览器打开显示都正常。 尽然是这个问题,真是想不到,谢谢楼主,牛人。
lue100200 2014-03-10
  • 打赏
  • 举报
回复
楼主万岁,这个问题我查了一个星期,还以为是框架或者CSS问题。。。 终于搞定了
云树之善 2013-12-26
  • 打赏
  • 举报
回复
多谢楼主 楼主真乃神人。以前用gbk编码没这种问题 目前用utf-8就出现了这恶心的问题 百思不得其解后百度看到楼主的帖子。
小游 2013-11-01
  • 打赏
  • 举报
回复
谢谢楼主。我为这问题困扰了好久,把你代码一运行就好。非常感谢。
lahvey 2013-07-06
  • 打赏
  • 举报
回复
楼主真乃大牛也,这个问题非常恶心的。
Ryan!Liu 2012-11-30
  • 打赏
  • 举报
回复
太感谢了 对头 谢谢楼主
niktang 2012-10-29
  • 打赏
  • 举报
回复
感谢老大啊!
p547116679 2012-10-14
  • 打赏
  • 举报
回复
真是非常非常非常感谢楼主,这个问题困扰了我好久了!真是太谢谢了!!!
ISBoolean 2012-07-13
  • 打赏
  • 举报
回复
谢谢!
li_ying122 2012-06-11
  • 打赏
  • 举报
回复
嗯嗯 非常感谢楼主 我也遇到了这个问题 用你写的方法已经解决了
MuBeiBei 2012-04-07
  • 打赏
  • 举报
回复
还有楼主检查是否有没闭合的标签,也会造成这样的原因。

include的位置对不对~·
torrychang 2012-04-07
  • 打赏
  • 举报
回复
多谢大家,更谢谢wzhiyuan,我解决了,就是include的问题,包含的文件是utf-8编码的,但是有BOM头,我用一个函数把网站目录里的所有文件的BOM头去掉以后就恢复正常了,希望看到帖子的同志们以后遇到这样的问题不要跟我一样纠结了,顺便贴一下我去除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);
}
?>


使用的方法是将该代码放入文件后放在网站的根目录,或者你想去哪个目录的BOM就放在哪个目录,然后直接用URL访问这个PHP文件就可以了!
Acesidonu 2012-04-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
smarty我没用过,我当初写php都是直接原始写,include的地方不少,出过你这类似的问题,就是包含一个文件后,在包含文件的地方总是多了一行空白,怎么调css和源文件都没有用,最后才发现是文件编码签名与否的问题。

你研究一下smarty fetch,看看是不是用的include,是的话,找一下包含的源文件,编辑器打开另存为来改一下编码
[/Quote]
说的有道理
wzhiyuan 2012-04-06
  • 打赏
  • 举报
回复
smarty我没用过,我当初写php都是直接原始写,include的地方不少,出过你这类似的问题,就是包含一个文件后,在包含文件的地方总是多了一行空白,怎么调css和源文件都没有用,最后才发现是文件编码签名与否的问题。

你研究一下smarty fetch,看看是不是用的include,是的话,找一下包含的源文件,编辑器打开另存为来改一下编码
torrychang 2012-04-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

你用到服务器端包含了吗?
asp 或者php的include 之类
注意这些包含文件的编码,是utf-8 65001一个是带签名(with signature) 一个是不带without,改成另外一种试一下
[/Quote]

我用的是smarty的fetch方法取得HTML代码,然后直接输出的!语言是PHP,文件我都用的是utf-8格式保存的,签名我还真不太懂!
wzhiyuan 2012-04-06
  • 打赏
  • 举报
回复
你用到服务器端包含了吗?
asp 或者php的include 之类
注意这些包含文件的编码,是utf-8 65001一个是带签名(with signature) 一个是不带without,改成另外一种试一下

61,115

社区成员

发帖
与我相关
我的任务
社区描述
层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。
社区管理员
  • HTML(CSS)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧