当页面包含IE条件注释时,经典ASP解析错误

时间:2010-01-31 17:11:49

标签: asp-classic

我想我已经发现ASP处理IE条件评论(或者一般的html评论)的方式存在错误。

理论上它根本不应该处理它们,因为它们是为客户端而设计的。

在实践中..

<!--[if IE 6]>
<!--include virtual="emptyfile.asp"-->
<![endif]-->

将返回

<![endif]>

是的,你读得正确..它会删除评论的开头,包括文件中的内容并保留结束评论标签..

这个'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

有明显的解决方法,例如使用server.execute来包含您的文件而不是include指令,它将按预期工作。

很可能它会将include指令的结尾-->与html注释的开头<!--混淆。但它根本不应该打扰html注释..

是否知道这种情况发生的原因?还是只是一个错误?

2 个答案:

答案 0 :(得分:4)

这不是错误。

asp include语法希望在标记注释中找到关键字#include。但是,它不要求在注释开始序列的末尾只有空格,直到#include关键字。因此,这是非常合法的: -

 <!-- pink elephants #include virtual="myinc.asp" -->

这也是合法的: -

 <!--
 #include virtual="myinc.asp"
 -->

现在,评论中<!--的任何后续出现都会被视为与任何其他文本一样。因此,这仍然是合法的: -

<!--
<!-- #include virtual="myinc.asp" -->

它是第一个开始评论的<!--,它被ASP视为包含标记。第二个是忽略文本。整个注释被“myinc.asp”文件的内容替换。如果文件恰好为空,则只需删除注释。

现在额外的[if IE 6]>仍然只是被忽略的文字,因此整个[if IE 6>\r\n<!--将被忽略。因此: -

<!--[if IE 6>
<!-- #include virtual="emptyfile.asp" -->

替换为“emptyfile.asp”的内容。随后的任何事情: -

<![endif]-->

逐字发送。

答案 1 :(得分:0)

如果您在IE 8中进行测试,则<![endif]-->将为<![endif]>

请查看此链接http://msdn.microsoft.com/en-us/library/ms537512%28VS.85%29.aspx

不同版本IE的条件评论。