有人可以向我解释,为什么这段代码有效?
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html<head>
<title//
<p ltr<span id=p></span</p>
</>
我期待收到你的回复。感谢关注
答案 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 </>
<html>
开放代码,不需要关闭</html>
代码。<head>
开放代码,不需要关闭</head>
代码。<title>
开放代码,互联网浏览器只需<title// <p ltr<span id=p>
阅读<title>
,不需要关闭</title>
代码。<title>
标记的内容(内部HTML),即</span</p> </>
(这是因特网浏览器显示的页面标题)。这是我的补充说明。希望能够帮到你。