谁能解释一下,为什么这段代码有效?
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html<head>
<title//
<p ltr<span id=p></span</p>
</>
Run Code Online (Sandbox Code Playgroud)
我期待收到您的回复.谢谢你的关注
那些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>
</>
Run Code Online (Sandbox Code Playgroud)
HTML 5(根据https://validator.w3.org/#validate_by_input 15错误):
<!DOCTYPE html>
<html<head>
<title//
<p ltr<span id=p></span</p>
</>
Run Code Online (Sandbox Code Playgroud)
说明:
该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#hB.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 </>
Run Code Online (Sandbox Code Playgroud)
<html>开放标记,</html>不需要结束标记.<head>开放标记,</head>不需要结束标记.<title>开放标记,Internet浏览器<title// <p ltr<span id=p>只是读取<title>,</title>不需要关闭标记.<title>标签的内容(内部HTML)</span</p> </>(这是因特网浏览器显示为页面的标题).这是我的另外解释.希望能够帮到你.