2013-03-03 162 views
3

我在查找HTML标记的有效字符时遇到问题。Valid HTML标记名称字符

在这个(Is the at-sign (@) a valid HTML/XML tag character?)回答它说:

之后再看看XML规格:

的标签包括:

'<' 名称(S属性)* S ? '>' A名称包括:

NameStartChar(NameChar)* A NameStartChar包括:

“:” | [A-Z] | “_”| [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] NameChar包含:

NameStartChar | “ - ”| “” | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] @符号是U + 0040

所以@符号是无效的NameChar或NameStartChar,因此 不是在一个名称中有效。

但是HTML语法页面(http://www.w3.org/TR/html-markup/syntax.html#tag-name),它只是说:

标签名称元素中使用开始标记和结束标记给予 元素的名称。 HTML元素的名称只能使用0-9,a-z和A-Z范围内的字符 。

什么是HTML标记名称中的valids字符? HTML4,XHTML和HTML5有什么区别?

+3

有效的HTML字符是HTML规范中提到的那些字符。有效的XML字符是XML规范中提到的那些字符。什么是混乱? – JJJ 2013-03-03 11:44:32

+0

这就是为什么我真的不喜欢StackOverflow:Google上最热门的搜索结果,但是由于某些模块决定关闭社区(或潜在社区)而导致一个非答案的封闭问题。自定义HTML标签现在已经成为一件事,官方的W3C规范草案指出标签名称的* XML *字符列表现在对HTML有效!关闭合法的问题真的让我感到厌烦,并说明我为什么不经常参加这个活动。例如,编写[universal-ish标记解析器](https://github.com/cubiclesoft/ultimate-web-scraper/blob/master/support/tag_filter.php)时,这个问题是有意义的。 – CubicleSoft 2018-02-08 15:29:30

回答

1

HTML文档必须符合HTML规范。 XML文档必须符合XML规范。 XHTML文档必须符合XML和HTML规范。

因此,对于XHTML文档,您必须从两个规范中取得有效字符的交集。由于XHTML基于XML规范,因此它不允许在XML中禁止使用字符。因此,XHTML中允许的字符总是XML的子集。所以允许的字符来自XHTML规范。

+0

XHTML不仅仅是一个XML格式的HTML文档。 W3C为XHTML定义了特定的规范。作为一个侧面提示:没有对应于HTML5的XHTML规范 – xorcus 2015-03-17 08:30:18

+1

@xorcus这是对的,我从来没有说过像'XHTML不仅仅是一个XML格式的HTML文档'。我想你误解了XHTML文档必须符合XML和HTML规范。我并不是说这一点就够了。 – 2015-03-17 10:31:05