在评论标签中转义html

时间:2008-11-26 05:11:31

标签: html escaping

转义html很好 - 它会删除<>等。

我遇到了一个问题,我在注释标签内输出文件名,例如。 <!-- ${filename} -->

当然,如果你不逃避事情可能会很糟糕,所以它变成了: <!-- <c:out value="${filename}"/> -->

问题是,如果文件名称中包含“ - ”,则所有html都会被搞砸,因为您不允许<!-- -- -->

标准的html转义并没有逃脱这些破折号,我想知道是否有人熟悉一种简单/标准的方法来逃避它们。

5 个答案:

答案 0 :(得分:6)

Definition of a HTML comment

评论声明以&lt;!开头,后跟零或多条评论,后跟&gt;。注释以“ - ”开头和结尾,并且不包含任何“ - ”。

当然,评论的解析取决于浏览器。

这里没有任何明显的解决方案让我感到震惊,所以我建议你str_replace那些双重破灭。

答案 1 :(得分:0)

没有好办法解决这个问题。你不能只是逃避它们,因为注释是以纯文本形式阅读的。你必须做一些事情,比如在连字符之间加一个空格,或者使用某种连字符代码(比如[HYPHEN])。

答案 2 :(得分:0)

没有通用的工作方式来逃避html中的那些字符,除非 - 字符是四的倍数所以如果你这样做 - 它不会在firefox中工作但是----会工作。所以这一切都取决于浏览器。例如,查看Internet Explorer 8,这不是问题,这些字符是正确转义的。 Googles Chrome也是如此......但是Firefox甚至是最新的浏览器(3.0.4),它也无法很好地处理这些角色。

答案 3 :(得分:0)

由于很明显你无法直接显示' - ',你可以对它们进行编码,也可以使用fn:escapeXml或fn:replace标签进行适当的替换。 JSTL documentation

答案 4 :(得分:0)

你不应该尝试HTML-escape,评论的内容是无法逃避的,而且内部有一个“&gt;”或“&amp;”就可以了。

' - '是它自己的,无关的问题,并不是真正可以解决的问题。如果你不需要恢复确切的字符串,只需做一个替换就可以去掉它们(例如用'__'代替)。

如果你确实需要将一个字符串完全不受限制地发送到将要读取注释内容的JavaScript,请使用字符串文字:

<!-- 'my-string' -->

然后脚本可以使用eval(commentnode.data)读取。 (是的,最后是对eval()的有效使用!)

然后你的转义问题就变成了如何把东西放在JS字符串文字中,这很容易通过转义'''和' - '字符来解决:

<!-- 'Bob\x27s\x2D\x2Dstring' -->

(如果您想使用相同的转义方案将JS字符串文字放在&lt; script&gt;块或内联中,您可能也应该转义'&lt;','&amp;'和'“'处理程序。)