Html DOM ID 中允许使用哪些字符?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/1077084/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-29 00:05:55  来源:igfitidea点击:

What characters are allowed in DOM IDs?

htmldom

提问by Josh Gibson

Possible Duplicate:
What are valid values for the id attribute in HTML?

可能的重复:
HTML 中 id 属性的有效值是什么?

Underscores seem fine. What about dashes? Other special characters?

下划线看起来不错。破折号呢?其他特殊字符?

回答by Ludwig Weinzierl

Actually there is a difference between HTML and XHTML. As XHTML is XML the rules for XML IDs apply:

实际上,HTML 和 XHTML 之间是有区别的。由于 XHTML 是 XML,因此适用于 XML ID 的规则:

Values of type ID MUST match the Name production.

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]

ID 类型的值必须与 Name 产生式匹配。

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]

Source: Extensible Markup Language (XML) 1.0 (Fifth Edition) 2.3

来源:可扩展标记语言 (XML) 1.0(第五版)2.3

For HTML the following applies:

对于 HTML,以下适用:

id = name [CS]
This attribute assigns a name to an element. This name must be unique in a document.

ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").

id = name [CS]
此属性为元素分配名称。此名称在文档中必须是唯一的。

ID 和 NAME 标记必须以字母 ([A-Za-z]) 开头,后面可以跟任意数量的字母、数字 ([0-9])、连字符 ("-")、下划线 ("_") 、冒号 (":") 和句点 (".")。

Source: HTML 4 Specification, Chapter 6, ID Token

来源:HTML 4 规范,第 6 章,ID 令牌

回答by RichieHindle

The W3C spec Basic HTML data typessays "ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".")."

W3C 规范基本 HTML 数据类型表示“ID 和 NAME 标记必须以字母 ([A-Za-z]) 开头,后面可以跟任意数量的字母、数字 ([0-9])、连字符 ("- ")、下划线 (" _")、冒号 (":") 和句点 (".")。"

回答by Alohci

If we take the title of your question literally, then neither the HTML nor XHTML rules apply. Instead, the relevant spec is the DOM one.

如果我们从字面上理解您的问题的标题,那么 HTML 和 XHTML 规则都不适用。相反,相关规范是 DOM 规范。

Taking DOM Level 3 as our source, and assuming that by "DOM ID" you mean an attribute with the "ID" flag set, then the value is a "DOMString", the characters of which can be any UTF-16 encodable character.

以 DOM Level 3 作为我们的来源,并假设“DOM ID”是指设置了“ID”标志的属性,则该值是“DOMString”,其字符可以是任何 UTF-16 可编码字符。

16-bit unit

The base unit of a DOMString. This indicates that indexing on a DOMString occurs in units of 16 bits. This must not be misunderstood to mean that a DOMString can store arbitrary 16-bit units. A DOMString is a character string encoded in UTF-16; this means that the restrictions of UTF-16 as well as the other relevant restrictions on character strings must be maintained. A single character, for example in the form of a numeric character reference, may correspond to one or two 16-bit units.

16 位单元

DOMString 的基本单位。这表明对 DOMString 的索引以 16 位为单位进行。这不能被误解为 DOMString 可以存储任意 16 位单元。DOMString 是 UTF-16 编码的字符串;这意味着必须保持 UTF-16 的限制以及对字符串的其他相关限制。单个字符,例如以数字字符引用的形式,可能对应一个或两个 16 位单元。

Of course, this is probably not what you want, and that Ludwig Weinzierl's answer is what you were looking for. However it is wise to understand that not all DOMs can be serialized as HTML or XHTML and that the DOM has it's own set of rules.

当然,这可能不是您想要的,而 Ludwig Weinzierl 的答案正是您想要的。然而,理解并非所有 DOM 都可以序列化为 HTML 或 XHTML 并且 DOM 有自己的一套规则是明智的。

回答by Philippe Gerber

According to the HTML 4.0 specs

根据 HTML 4.0 规范

ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").

ID 和 NAME 标记必须以字母 ([A-Za-z]) 开头,后面可以跟任意数量的字母、数字 ([0-9])、连字符 ("-")、下划线 ("_") 、冒号 (":") 和句点 (".")。

回答by The Enormous Pianist

For purposes of valid html aka xhtml, Philippe is correct. No spaces or special characters (certainly none that require escaping) for id attributes. Just the 52 character alphabet, upper and lower case, numerals 0-9, hyphens ("-"), underscores ("_"), colons (":"), and periods (".")

就有效的 html aka xhtml 而言,菲利普是正确的。id 属性没有空格或特殊字符(当然不需要转义)。仅 52 个字符的字母、大小写、数字 0-9、连字符 ("-")、下划线 ("_")、冒号 (":") 和句点 (".")