为什么这个HTML代码有效?

时间:2016-02-24 11:02:10

标签: html validation

有人可以向我解释,为什么这段代码有效?

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

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

1 个答案:

答案 0 :(得分:5)

这些HTML代码是有效的,因为HTML 4.01允许这些内容,并且尊重doctype的Internet浏览器会显示它没有任何问题。

如果将doctype更改为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应用程序添加表达能力。虽然这些结构在技术上没有引入歧义,但它们会降低文档的健壮性,特别是当语言被增强以包含新元素时。因此,尽管广泛使用和实现了与属性相关的SGML的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        </>
  • 第1行是HTML 4.0.1的有效doctype。
  • 第2行是有效的<html>开放代码,不需要关闭</html>代码。
  • 第2行也是有效的<head>开放代码,不需要关闭</head>代码。
  • 第3行是有效的<title>开放代码,互联网浏览器只需<title// <p ltr<span id=p>阅读<title>,不需要关闭</title>代码。
  • 第4-5行是<title>标记的内容(内部HTML),即</span</p> </>(这是因特网浏览器显示的页面标题)。

这是我的补充说明。希望能够帮到你。