是字符“&”在HTML 4.01严格的文件中单独非法?

时间:2011-04-19 21:48:12

标签: html

我总是看到语句本身不在HTML文档中使用&,而是使用&

所以我尝试将&放在标题和页面内容中,但是他们验证了:

http://topics2look.com/code-examples/HTML/ampersand-by-itself-can-validate.html

{4.0}在HTML 4.01严格文档中是否合法?

4 个答案:

答案 0 :(得分:2)

W3C HTML 4.01 Strict Charset section

  

四个字符实体引用   值得特别提及,因为他们是   经常用来逃避特殊   字符:

* "&lt;" represents the < sign.
* "&gt;" represents the > sign.
* "&amp;" represents the & sign.
* "&quot; represents the " mark.
     

希望提出“&lt;”的作者   文字中的字符应使用“&lt;”   (ASCII十进制60)以避免可能   与标签的开头混淆   (开始标记打开分隔符)。同样的,   作者应该使用“&gt;” (ASCII   十进制62)在文本而不是“&gt;”至   避免旧用户代理出现问题   错误地认为这是   标记的结尾(标记关闭分隔符)   当它出现在quoted属性中时   值。

     

作者应使用“&amp; amp;” (ASCII   十进制38)而不是“&amp;”避免   混乱与开始   字符引用(实体引用   开放分隔符)。作者也应该   使用“&amp; amp;”在属性值中   允许使用字符引用   在CDATA属性值中。

因为它使用“应该”而不是“必须”这个词,我想你可以跳过它并仍然验证。

但是不要这样做,因为它有时会变得奇怪。

我实际上不得不在我的剪辑粘贴中删除几个&符号以获得SO来渲染字符实体文本......; - )

答案 1 :(得分:1)

HTML 4中是否出现错误取决于SGML中是否出现错误。我无法检查,因为规范不公开。 HTML 4规范确实意味着它不是错误(“作者应该使用”&amp;“»使用”应该“,而不是”必须“)。

HTML 4的XML序列化(XHTML)中出现错误,因为它是XML中的错误(«CharData :: = [^&lt;&amp;] * - ([^&lt;&amp;] *']]&gt; '[^&lt;&amp;] *)»)

HTML 5的HTML序列化不是错误。 («不是字符引用。不消耗任何字符,也不返回任何字符。(这也不是错误。)»)

HTML 5的XML序列化中出现错误,因为它在XML中无效(«CharData :: = [^&lt;&amp;] * - ([^&lt;&amp;] *']]&gt;'[^&lt; &安培;] *)»)

答案 2 :(得分:1)

是的,这是合法的。

它在HTML 4.01中是合法的,并且在HTML 4严格文档类型中也是合法的,因为它不是FONT标记之类的弃用功能之一。

在任何版本的XHTML中都不合法。原因是根据定义,XHTML必须符合XML,未转义的&符号在规范中具有特殊含义(对于实体)。

如果可能的话,最好使用XHTML,因为它更紧凑,更现代,并且可以在http://en.wikipedia.org/wiki/XHTML找到更多信息。通常,HTML用于传统支持。

我理解HTML在许多地方仍然出于实际原因使用,在这种情况下使用转义版本被视为最佳做法,即使它在您的doctype中实际上是合法的

如果您想更多地搜索该主题,则“符号本身”的&符号称为“未转义的&符号”。

答案 3 :(得分:0)

我对此进行了彻底的研究,并在此处写了我的发现: http://mathiasbynens.be/notes/ambiguous-ampersands

我还创建了an online tool,您可以使用它来检查您的标记是否有歧义的符号或不以分号结尾的字符引用,这两个都是无效的。 (目前没有HTML验证器正确执行此操作。)

http://i.stack.imgur.com/nyGPK.png