Asp-Classic

頁麵包含 IE 條件註釋時的經典 ASP 解析錯誤

  • November 29, 2010

我想我在 ASP 處理 IE 條件註釋(或一般的 html 註釋)的方式中發現了一個錯誤。

從理論上講,它根本不應該處理它們,因為它們是為客戶端設計的。

在實踐中 ..

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

將返回

<![endif]>

是的,你沒看錯..它將刪除評論的開頭,包括文件中的任何內容並保留結束評論標籤..

這當然會弄亂 html,當然也會讓 IE 對所有人執行任何操作……

有明顯的解決方法,例如使用server.execute包含您的文件而不是包含指令,這將按預期工作..

很可能它將 include 指令的結尾-->與 html 註釋的開頭混淆了<!--但它根本不應該打擾 html 註釋。

以這種方式發生這種情況有什麼已知的原因嗎?還是只是一個錯誤?

這不是錯誤。

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]-->

逐字發送。

引用自:https://stackoverflow.com/questions/2172549