为什么 HTML5 规范中禁止使用某些字符?

Why are certain characters prohibited in the HTML5 spec?

根据HTML5 spec(就在table之后),禁止使用以下字符:

Otherwise, return a character token for the Unicode character whose code point is that number. Additionally, if the number is in the range 0x0001 to 0x0008, 0x000D to 0x001F, 0x007F to 0x009F, 0xFDD0 to 0xFDEF, or is one of 0x000B, 0xFFFE, 0xFFFF, 0x1FFFE, 0x1FFFF, 0x2FFFE, 0x2FFFF, 0x3FFFE, 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE, 0x5FFFF, 0x6FFFE, 0x6FFFF, 0x7FFFE, 0x7FFFF, 0x8FFFE, 0x8FFFF, 0x9FFFE, 0x9FFFF, 0xAFFFE, 0xAFFFF, 0xBFFFE, 0xBFFFF, 0xCFFFE, 0xCFFFF, 0xDFFFE, 0xDFFFF, 0xEFFFE, 0xEFFFF, 0xFFFFE, 0xFFFFF, 0x10FFFE, or 0x10FFFF, then this is a parse error.

这种排除背后的原因或动机是什么?

它们是导致互操作性问题的代码点,无论是与 XML/XHTML 文档还是与现存的 HTML 解析器。由于其中 none 有任何明显的有效用途,因此应避免使用。

非字符(U+FDD0–FDEF 和 U+NFFFE–F)和控制字符 U+0000–8;0D–1F 在 XML 1.0 中无效。 0x80–0x9F 范围内的字符引用在 XML 和 HTML 解析器中产生不同的结果,因为在紧接其前的 table 中进行了替换(并且还有许多非浏览器 HTML 没有实现这个奇怪的历史怪癖的解析器)。