14

我现在开发网站和 XML 接口已有 7 年了,从来没有遇到过真正需要使用&gt;for a >. 到目前为止,所有的歧义都可以通过引用,<和单独来处理。&"'

有没有人遇到过这样的情况(例如,与 SGML 处理、浏览器问题、XSLT 等有关),您发现用 转义大于号是必不可少的&gt;

更新:我刚刚检查了XML 规范,其中提到了例如第 2.4 节中的字符数据:

字符数据

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

所以即使在那里,>除了 CDATA 部分的结束序列之外,也没有提到特别的东西。

在这种情况下, 有>任何意义,将是 CDATA 部分的结尾]]>,但是再一次,如果您引用它,则引号(即文字字符串]]&gt;)将按字面意思出现在输出中(因为它是CDATA)。

4

5 回答 5

7

You don't need to absolutely because almost any XML interpreter will understand what you mean. But still you use a special character without any protection if you do so.

XML is all about semantic, and this is not really semantic compliant.

About your update, you forgot this part :

The right angle bracket (>) may be represented using the string " > ", and must, for compatibility, be escaped using either " &gt; " or a character reference when it appears in the string " ]]> " in content, when that string is not marking the end of a CDATA section.

The use case given in the documentation is more about something like this :

<xmlmarkup>
]]>
</xmlmarkup>

Here the ]]> part could be a problem with old SGML parsers, so it must be escaped into = ]]&gt; for compatibilities reasons.

于 2010-08-25T14:45:03.943 回答
3

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

我的意思是,如果您以正确的方式制作您的网站,那么您无论如何都不会对您的内容进行硬编码,对吧?因此,您的电话htmlentities或其他任何东西(好久不见,php)都会为您替换特殊字符。所以可以肯定的是,您不会手动输入&gt;,但我希望您采取措施>自动替换。

于 2010-08-25T14:50:39.007 回答
3

我在19 小时前使用了一个来通过严格的 xml 验证器。另一种情况是当您实际在 html/xml 内容文本(而不是属性)中使用它们时,如下所示<

当然,一个松散的解析器会接受你扔给它的大多数东西,但如果你曾经担心过 XSS,< 是你的朋友。

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

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

诚然,这仍然不是一个不得不逃避孤独的例子>

于 2010-08-25T14:55:35.057 回答
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>
于 2013-12-21T00:19:14.723 回答
0

我只是想到了另一个例子,你需要>在 HTML5(而不是 XHTML5)文档中引用:如果你需要在不带引号的属性中引用它(这是什么,当然可以争论)。

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

应该等同于 XHTML

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

但话又说回来, (?<!X)HTML 不是 SGML。

于 2011-07-18T08:06:25.053 回答