为什么这段HTML代码是有效的?

5

有人可以向我解释一下,为什么这段代码是有效的吗?

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
    <html<head>
    <title//
    <p ltr<span id=p></span</p>
    </>

我期待着收到你的回复。感谢关注。


3
为什么不可以呢?(您在其中使用了许多不常用的 HTML 特性,如果您有关于其中一个特性的具体问题,那么这可能是一个更好的问题。) - Quentin
2
@ichan-akira — 嗯,就DTD而言,它是有效的。 - Quentin
6
@MarcosPérezGude — 这些警告与有效性无关。 - Quentin
1
已在 https://validator.w3.org/check 中尝试过,并显示“此文档已成功作为 HTML 4.01 Strict 进行了检查!”但是有“通过,7个警告”。 - ichan-akira
5
@MarcosPérezGude - 那么呢?这个问题在询问有效性,而不是质量。它也没有询问最佳实践。 - Quentin
显示剩余4条评论
1个回答

5
这些HTML代码是有效的,因为HTML 4.01允许这些内容,遵循文档类型声明的Internet浏览器将毫无问题地显示它们。如果您将文档类型声明更改为HTML 5,则肯定会出现错误,因为HTML 5对编写正确的HTML标签更加严格。 HTML 4.01 (根据https://validator.w3.org/#validate_by_input,没有错误):
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
    <html<head>
    <title//
    <p ltr<span id=p></span</p>
    </>

HTML 5(根据https://validator.w3.org/#validate_by_input,有15个错误):

 <!DOCTYPE html>
    <html<head>
    <title//
    <p ltr<span id=p></span</p>
    </>
说明:

这个HTML结构是有效的,因为根据HTML 4.0.1规范(https://www.w3.org/TR/1999/REC-html401-19991224/):

B.3.7 简写标记

一些SGML SHORTTAG结构节省了打字时间,但对SGML应用程序没有增加任何表现能力。虽然这些结构从技术上讲不会引入歧义,但它们降低了文档的健壮性,特别是当语言被增强以包括新元素时。因此,尽管与属性相关的SHORTTAG结构得到广泛使用和实现,但与元素相关的SHORTTAG结构却没有。使用它们的文档是符合SGML文档的,但不太可能与许多现有的HTML工具一起使用。

所涉及的SHORTTAG结构如下:

  • NET标记:
    <name/.../
  • 闭合开始标记:
    <name1<name2>
  • 空开始标记:
    <>
  • 空结束标记:
    </>

引用自https://www.w3.org/TR/1999/REC-html401-19991224/appendix/notes.html#h-B.3.7


因此,根据HTML 4.01规范,这意味着:

1     <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
2        <html<head>
3        <title//
4        <p ltr<span id=p></span</p>
5        </>
  • 第一行是HTML 4.0.1的有效文档类型声明。
  • 第二行是有效的<html>开始标签,不需要关闭</html>标签。
  • 第二行还是有效的<head>开始标签,不需要关闭</head>标签。
  • 第三行是有效的<title>开始标签,浏览器会将<title// <p ltr<span id=p>读作<title>,不需要关闭</title>标签。
  • 第四至五行是<title>标签的内容(内部HTML),即</span</p> </>(这是浏览器显示为页面标题的内容)。

以上是我的额外解释。希望能帮到你。


5
这些 HTML 代码是有效的,因为 HTML 4.01 允许这些东西。—— 你基本上是在说它是有效的,因为它是有效的,这并没有什么帮助。 - Quentin
1
“尊重文档类型的互联网浏览器将毫无问题地显示它。”——并非如此。该代码示例使用了大量HTML功能,其中大多数浏览器从未支持过。 - Quentin
1
@Quentin,我已经更新了我的解释,希望这样能够解释清楚。 - ichan-akira
@ichan-akira 这个答案真的很好,谢谢。 - Mohammad Kermani
@Kermani 我很高兴能够帮助。 - ichan-akira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接