我想我已经确定了ASP处理IE条件评论(或一般的html评论)的方式中的一个错误.
理论上它根本不应该处理它们,因为它们是为客户端而设计的.
在实践中 ..
<!--[if IE 6]>
<!--include virtual="emptyfile.asp"-->
<![endif]-->
Run Code Online (Sandbox Code Playgroud)
将返回
<![endif]>
Run Code Online (Sandbox Code Playgroud)
是的,你读得正确..它将删除评论的开头包括文件中的任何内容并保留结束评论标签..
这个'''''''''''''''''''''''''''''''''''''''''''''''''''''
有明显的解决方法,例如使用server.execute包含您的文件而不是include指令,它将按预期工作.
很可能它将-->include指令的结尾与<!--html注释的开头混淆了.. 但它根本不应该打扰html注释.
知道这种情况发生的原因是什么?还是只是一个bug?
这不是一个错误。
#includeasp include 语法期望在标记注释中找到关键字。但是,它并不要求从注释开始序列末尾到#include关键字之间只有空格。因此这是相当合法的:-
<!-- pink elephants #include virtual="myinc.asp" -->
Run Code Online (Sandbox Code Playgroud)
这也是合法的:-
<!--
#include virtual="myinc.asp"
-->
Run Code Online (Sandbox Code Playgroud)
现在,注释中随后出现的任何内容<!--都会像任何其他文本一样被处理。因此这仍然是合法的:-
<!--
<!-- #include virtual="myinc.asp" -->
Run Code Online (Sandbox Code Playgroud)
这是第一个<!--开始注释的部分,被 ASP 视为包含标记。第二个只是被忽略的文本。整个注释被“myinc.asp”文件的内容替换。如果文件恰好为空,则注释将被简单删除。
现在,额外的[if IE 6]>内容仍然只是被忽略的文本,因此整个[if IE 6>\r\n<!--文本将被忽略。因此:-
<!--[if IE 6>
<!-- #include virtual="emptyfile.asp" -->
Run Code Online (Sandbox Code Playgroud)
被“emptyfile.asp”的内容替换。任何后续:-
<![endif]-->
Run Code Online (Sandbox Code Playgroud)
逐字发送。