是>>有必要吗?

时间:2010-08-25 14:41:41

标签: html xml escaping quoting sgml

我现在开发网站和XML界面已经7年了,而且从来没有出现过这样的情况,真正有必要将&gt;用于>。到目前为止,所有歧义都可以通过单独引用<&"'来处理。

有没有人遇到过某种情况(例如,与SGML处理,浏览器问题,XSLT等有关),你发现它与&gt;一起逃避大于号的必不可少?

更新:我刚刚使用XML spec进行了检查,例如,在第2.4节中有关字符数据的内容:

  

字符数据

[14]      CharData       ::=      [^<&]* - ([^<&]* ']]>' [^<&]*)

所以即使在那里,>也没有被提及为特殊的东西,除了CDATA部分的结束序列。

>具有任何意义的这一个案例将是CDATA部分]]>的结尾,但如果你引用它,那么再次引用(即,文字字符串]]&gt;)将在字面上输出(因为它是 CDATA )。

5 个答案:

答案 0 :(得分:7)

您不需要绝对,因为几乎任何XML解释器都能理解您的意思。但如果你这样做,你仍然会使用一个没有任何保护的特殊角色。

XML完全是关于语义的,并不是真正符合语义的。

关于更新,您忘记了这一部分:

  

右尖括号(&gt;)可以使用字符串“&gt;”表示,并且为了兼容性,必须使用“&gt;”或字符串引用进行转义,当它出现在字符串中时“ ]]>“在内容中,当该字符串未标记CDATA部分的结尾时。

文档中给出的用例更多地是这样的:

<xmlmarkup>
]]>
</xmlmarkup>

此处]]>部分可能是旧SGML解析器的问题,因此出于兼容性原因,必须转义为= ]]&gt;

答案 1 :(得分:3)

与(x)html文档的作者不同,更多的是作为网站中草率的书面评论字段的用户,“提供”您插入HTML。

我的意思是如果你以正确的方式建立自己的网站,你就不会硬编码你的内容,对吧?因此,您对htmlentities或其他任何内容(长时间没有看到,php)的调用将会为您替换特殊字符。 当然,您不会手动输入&gt;,但我希望您采取措施,以便自动替换>

答案 2 :(得分:3)

我之前用one not 19 hours传递了一个严格的xml验证器。另一种情况是当你在html / xml内容文本(而不是属性)中实际使用它们时,如下所示:<

当然,一个松散的解析器会接受你扔的大部分东西,但如果你曾经担心过XSS,那么&amp; lt;是你的朋友。

更新:以下是您需要在Firefox中转义>的示例:

<?xml version="1.0" encoding="utf-8" ?>
<test>
    ]]>
</test>

当然,它仍然不是逃避孤独>的一个例子。

答案 3 :(得分:0)

我想到了另一个例子,你需要在HTML5( not XHTML5 )文档中引用>:如果你需要在没有引号的属性中(这是某种东西,那可以当然是争论。)

<img src=arrow.png alt=&gt;>

应该等同于XHTML

<img src="arrow.png" alt=">" />

但话说回来,(?&lt;!X)HTML不是SGML。

答案 4 :(得分:0)

想象一下,您有以下文字this is a not a ]]> nice day,并且您决定通过CDATA部分<![CDATA[this is a not a ]]> nice day]]>将其包围。

为了避免这种情况(以及允许使用未终止的标记部分解析SGML片段),ISO 8879:1986的第10.4条声明在标记之外出现]]> 部分是错误

此外,在SGML时期,标记的部分非常流行,因为它们不仅用于CDATA(如在XML中),还用于RCDATA(仅允许实体和字符引用)和IGNORE和INCLUDE(允许识别其中的标记)。

例如,在SGML中可以写:

 <!ENTITY %WHATTODO "INCLUDE">
 <![%WHATTODO;[<b>]]&gt;</b>]]>

相当于:

 <b>]]&gt;</b>