代码之家  ›  专栏  ›  技术社区  ›  Jeff

XHTML、XML和内联JavaScript内部的适当实体类型

  •  0
  • Jeff  · 技术社区  · 16 年前

    首先,按照我的理解,在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:

    下面是所有的好答案,伙计们。不幸的是,只能选一个。

    3 回复  |  直到 16 年前
        1
  •  0
  •   Gumbo    16 年前

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

    &quot; is also defined for XHTML. 所以你可以两者兼用。

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

    再一次, &quot; is also defined for XML. 所以你可以两者兼用。

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

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


    编辑 __________

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

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

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

        2
  •  0
  •   Quentin    16 年前

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

    不完全是这样。

    有两个问题需要担心。

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

    没有 &apos; 是HTML,因此不能在与HTML兼容的XHTML中使用它(但只需在用“,分隔的属性值中使用它,所以只需使用”即可。

    是否将使用不知道DTD的XML解析器来处理此问题?

    如果是这样,则只识别通用XML实体(Quot、Apos、gt、lt、amp)。

    另一方面,命名实体的可读性更高。真正的字符(例如,通过UTF-8)是最可读的。

    第二,对于我的RSS XML源,它 实体类型是否正确?

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

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

    更好使用 unobtrusive JS 而不是内部事件属性。

    也就是说,这些规则与任何其他HTML属性“仅”相同。 & 无论您用来分隔属性值的字符是什么,都需要用一个实体来表示。

        3
  •  0
  •   bobince    16 年前
    • < , & 和 “ 在属性值中,其中 " 是分隔符:使用 &lt; , &amp; 和 &quot; ,分别。

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

    数字字符引用同样有效,但读起来有点困难。

    • > 在文本内容中:使用 &gt; 或者按原样离开。

    > 通常不需要转义,它始终在属性值中是完全合法的,并且在文本内容中是合法的,只要它不构成 ]]> 序列。(这是XML规范中一个模糊的、无意义的、有时被忽略的部分。)无论如何,为了安全起见,您可能希望总是在文本内容中转义它,而不必记住这个规则。(规范XML就是这样做的。)

    数字字符引用同样有效,但读起来有点困难。

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

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

    • 非ASCII字符:按原样包含

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

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

    如果出于某种原因您不能使用UTF-8(booo!!!!),使用类似的字符引用 &#xE9; 而不是HTML实体。无论如何,HTML实体只覆盖Unicode字符集的一小部分;也可以将它们用于所有IMO。我个人更喜欢使用 &#x... 非ASCII字符的十六进制转义,因为传统上通过十六进制代码引用Unicode字符。

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

    与往常一样,RSS的情况是很不明朗的,所有不同的RSS版本都潜伏着。rss 0.91有一个DTD,其中包含了旧的HTML3.2标准的实体,但是DTD以前的官方系统URL已经走了。(几年前,网景的所有者美国在线(AOL)在一次重组中断开了链接,这是一次令人恼火且不必要的互联网破坏行为。不仅如此,如果您试图访问他们的主页或旧站点上的任何其他地址,他们也会302您访问他们的主页,从而为希望使用DTD的客户提供一个写得不好的HTML页面。糟糕的美国在线,302-404太假了。)

    RSS 2.0根本没有正式的DTD。因此,无论采用哪种方法,都要避免使用HTML实体,并优先使用预定义的实体和数字字符引用。

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

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

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

    有效但不可读。我赞同大卫不引人注目的javascript建议。