一个网页页面模版,头部代码如下:
<html>
<head>
<title>新楼盘管理</title>
<meta http-equiv=”Content-Type” content=”text/html; charset={$charset}”>
<link href=”styles/style.css” rel=”stylesheet”>
<script language=”javascript” src=”scripts/common.js”></script>
<script type=”text/javascript” src=”scripts/jquery/jquery.js”></script>
</head>
<body topmargin=”0″ leftmargin=”0″ >
……
其中{$charset}是模版中的变量,被赋值为“utf-8”,页面也保存为 utf8 编码。
其中“新楼盘管理”的 title 原来是没有这串字符的,我顺手就加上了。但是:出问题了!
一定有人说,加个title能出什么问题?!
出问题的现象是这样的,页面下载下来了,但显示是空白。能看到源代码,但浏览器就是显示不了页面的界面!
测试了IE各种浏览器,也测试了Firefox浏览器。结果是:
在 Apache 做服务器时无论什么浏览器都正常。
Firefox浏览什么web服务器上的该页面,都正常!
IE的部分版本完全正常,部分版本偶尔正常、偶尔不正常!
最感到奇怪的就是,部分IE偶尔正常、偶尔不正常!也就是故障现象不确定,无法复制故障的环境,也就无法跟踪故障。一度怀疑浏览器版本问题,一度怀疑是 IIS 不稳定的问题(差点又把屎盆子扣到微软头上了)。
但结果问题是:网页的编码问题。
由于之前 titlt 标签内是空的,charset=tuf-8 就从该语句后起作用了,但加了标题字符串后,页面就不知道如何解释标题的编码了。但为什么在 Apache 下却是正常的呢?估计 Apache 解释页面时,是首先解释语句
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
然后,再把这个编码应用到整个页面,而 IIS 却是顺序解释页面的代码的。
为什么有的浏览器正常,有的又不正常呢?原因可能也和代码的解释顺序有关。
所以,为了兼顾各种情况,语句调整一下顺序,把定义编码的语句放到最前头即可。
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset={$charset}”>
<title>新楼盘管理</title>
……
事实上,用 Drameweaver 建立页面,定义编码的语句本身就是在最前头的,还是软件工具兼容性做的最好。