XHTML、XML 和内部内联 JavaScript 的正确实体类型

Proper entity types for XHTML, XML and inside inline JavaScript

提问人:Jeff 提问时间:11/15/2009 最后编辑:Jeff 更新时间:11/16/2009 访问量:1158

问:

首先,按照我的理解,在 XHTML 文档中使用数字实体更合适,例如代替 ,对吗?""

其次,对于我的 RSS XML 提要,哪种实体类型是正确的?命名还是数字?我相信它是数字,但在我的搜索中查看两者的示例。

第三,对于内联 JavaScript 中的实体,以下哪项是正确的?

<span onmouseover="tooltip_on( '<strong>Tooltip inside a span</strong>
<br />Lorem ipsum dolor sit amet.<span>Lorem ipsum <code>dolor sit</code>
amet, consectetur adipisicing elit.</span>' );"
onmouseout="tooltip_off();">tooltip inside a span</span>

或。。。(里面的标签被转换为命名实体):JS function

<span onmouseover="tooltip_on( '&lt;strong&gt;Tooltip inside a
span&lt;/strong&gt;&lt;br /&gt;Lorem ipsum dolor sit amet.
&lt;span&gt;Lorem ipsum &lt;code&gt;dolor sit&lt;/code&gt;
amet, consectetur adipisicing elit.&lt;/span&gt;' );"
onmouseout="tooltip_off();">tooltip inside a span</span>

编辑1:

下面的答案很好,但也许我应该以不同的方式表达我的问题。

忽略 JavaScript 问题,您将将其用于您的网站和 RSS 提要:

(1) 所有数字实体,(2) 所有命名实体,(3) 两者的混合:,其余为数字。&amp; &quot; &lt; &gt;

我倾向于 3,因为我的网站已经深深嵌入,并且在很多地方使用。&amp; &quot; &lt; &gt; &#039;htmlspecialchars()

编辑2:

伙计们,下面都是好的答案。不幸的是,只选了一个。

JavaScript HTML XML XHTML 实体

评论


答:

0赞 Quentin 11/15/2009 #1

首先,我的理解是 使用数字更合适 XHTML 文档中的实体,例如 “而不是”,是 右?

不完全是。

有两个问题需要担心。

这将是普通的旧 XHTML 还是与 HTML 兼容的 XHTML?

没有 HTML,所以你不能在 HTML 兼容的 XHTML 中使用它(但你只需要在用 ' 分隔的属性值中使用它,所以只需使用 “ 代替。&apos;

这是否将使用无法识别 DTD 的 XML 解析器进行处理?

如果是这样,则仅识别通用 XML 实体(quot、apos、gt、lt、amp)。

另一方面,命名实体的可读性要高得多。实数字符(例如通过 UTF-8)最易读。

其次,对于我的 RSS XML 提要,这 实体类型是否正确?

在需要时使用 quot、gt、lt、amp,在其他地方使用真实字符。

第三,以下哪项是 对内联内部的实体进行更正 JavaScript的?

最好使用不显眼的 JS 而不是内部事件属性。

也就是说,这些规则与任何其他 HTML 属性的规则相同——只是用于分隔属性值的任何字符都需要用实体表示。&

评论

0赞 Jeff 11/15/2009
谢谢大卫。因此,对于问题 1:我认为答案是“使用命名实体”。问题 2:在我的 Feed 上使用数字实体有什么坏处吗?Q3:不明白答案。
0赞 Gumbo 11/15/2009 #2

首先,按照我的理解,在 XHTML 文档中使用数字实体更合适,例如代替 ,对吗?&#034;&quot;

也为 XHTML 定义。因此,您可以同时使用两者。

其次,对于我的 RSS XML 提要,哪种实体类型是正确的?命名还是数字?我相信它是数字,但在我的搜索中查看两者的示例。

同样, 也是为 XML 定义的。因此,您可以同时使用两者。

第三,对于内联 JavaScript 中的实体,以下哪项是正确的?

第二个是正确的,因为在属性值声明中不允许使用纯文本(但允许)。<>


编辑现在您已经完善了您的问题:

我会使用一个包含我需要的所有字符的字符集。因此,如果您希望能够使用几乎任何字符,请使用 Unicode 并使用 UTF-8 对字符进行编码。

因此,您可以直接使用 UTF-8 对任何字符进行编码,而不需要对 XML 特殊字符以外的字符使用字符引用(至少 、 和 )。&>"'

在这里,您可以自由选择命名或数字字符引用。使用你喜欢的更好的东西,或者你的编程语言使用/喜欢的东西。

评论

0赞 Jeff 11/15/2009
谢谢秋葵浓汤。如果未为 XML 定义实体,例如 ,我是否应该将数字实体用于我的 XML RSS 源?&nbsp;
0赞 Gumbo 11/15/2009
@Jeff:是的,数字字符引用总是有效的。
0赞 Jeff 11/15/2009
感谢您的编辑。我的服务器和代码都使用 UTF8。需要明确的是,你是在告诉我,我可以使用上面的任何选项吗?具体来说是 3?
0赞 Gumbo 11/15/2009
@Jeff:是的,只要定义了命名字符引用,就可以使用所有三个选项。至于 XML,它们是 、 、 和 (参见 w3.org/TR/xml/#sec-predefined-ent)。&gt;&lt;&amp;&apos;&quot;
0赞 Jeff 11/15/2009
我读过一些关于为XML“定义”实体的文章,但不确定它是什么意思。如果它要求我在提要的 XML 头中定义,我想我宁愿只使用数字实体。我有这个权利吗?&quot; = &#034;
0赞 bobince 11/15/2009 #3
  • <,在属性值中,其中 是分隔符:分别使用 和 。&""&lt;&amp;&quot;

这些是 XML 中的预定义实体,因此无论它是否读取文档类型,都可以与任何解析器一起使用。它们也是 HTML 中正常定义的实体。

数字字符引用同样有效,但阅读起来略有难度。

  • >在文本内容中:使用或保留原样。&gt;

>通常不需要转义,它在属性值中始终是完全合法的,并且在文本内容中是合法的,只要它不构成序列的一部分。(这是 XML 规范中一个晦涩难懂、毫无意义且有时被忽略的部分。无论如何,您可能更愿意在文本内容中始终对其进行转义,只是为了安全起见,而不必记住此规则。(这就是 Canonical XML 的作用。]]>

数字字符引用同样有效,但阅读起来略有难度。

  • '在属性值中,其中是分隔符:使用 .'&#39;

数字字符引用在这里是最正确的,因为 XML 预定义实体在技术上不是由 HTML4 标准定义的(即使它可以在所有当前浏览器中工作)。添加此实体的延迟反映了始终用作属性值分隔符的常见做法。&apos;"

  • 非 ASCII 字符:按原样包含

只要你使用并声明 UTF-8,你就可以直接吐出字符。更小、更易读的结果。

  • 非 ASCII 字符(不带 Unicode):使用数字字符引用

如果由于某种原因不能使用 UTF-8 (boooo!!),请使用字符引用,而不是 HTML 实体。无论如何,HTML 实体只覆盖了 Unicode 字符集的一小部分;还不如将它们用于所有 IMO。我个人更喜欢对非 ASCII 字符使用十六进制转义,因为传统上用“U+xxxx”十六进制代码来指代 Unicode 字符。&#xE9;&#x...

尽管在 XHTML 文档中使用 HTML 实体非常有效,但这意味着解析器必须获取外部实体(如 DTD)才能确定实体是什么。如果坚持使用预定义的实体和字符引用,则可以使用轻量级的非外部实体(包含外部实体)XML 解析器,而不会失去在文档中查找文本(包括实体)引用的能力。

RSS的情况是模糊的,像往常一样,所有不同的RSS版本都潜伏着。RSS 0.91 有一个 DTD,其中包含旧 HTML 3.2 标准的实体,但 DTD 之前的官方 SYSTEM URL 已经消失了。(在令人讨厌且不必要的互联网破坏行为中,Netscape的所有者AOL在几年前的一次重组中破坏了该链接。不仅如此,如果您尝试访问他们的主页或旧网站上的任何其他地址,他们还会将您 302 带到他们的主页,从而向期望 DTD 的客户提供写得不好的 HTML 页面。糟糕的 AOL,302-404 太假了。

RSS 2.0 根本没有官方的 DTD。因此,无论哪种方式,都应避免使用 HTML 实体,而是使用预定义的实体和数字字符引用。

onmouseover="tooltip_on( '<strong>Tool...

不允许在任何文档类型中使用。 在属性值中无效。<

onmouseover="tooltip_on( '&lt;strong&gt;Tooltip...

有效但不可读。我赞同 David 的 Unobtrusive JavaScript 建议。

评论

0赞 Jeff 11/15/2009
我不知道你是否会因为这个回复而出名=),但我肯定会为我的 JS 寻找另一种方法。JQuery 是“不显眼”的吗?
0赞 bobince 11/15/2009
是的,我只对油嘴滑舌的帖子投票,人们讨厌冗长的答案。;-)jQuery(或任何其他框架)本质上并不是“不显眼的”,但以这种方式使用它肯定很常见,使用选择器来选择元素并将事件处理程序绑定到它们,而不是使用内联 HTML 事件处理程序属性。