我正在检查我是否可以在名称属性中安全地使用空格,并且压倒性的共识(除了社区认为不正确的一个答案之外)很好,因为名称属性使用 CDATA 令牌而不是名称令牌,或类似的规定。问题是我似乎无法找到关于这到底是什么意思的信息。
什么是名称令牌?如果 name 属性不使用一个,那有什么意义呢?就此而言,令牌到底是什么?我正在查找有关该主题的一些信息,但这一切似乎都超出了我的想象。
谢谢!
令牌可以粗略地定义为代表某物并遵循特定模式的字符序列。您可能会发现此编程语言语法概述是基本定义的良好开端。可以在w3 站点上找到各种类型的受支持令牌,并列出如下:
CDATA 是来自文档字符集的字符序列,可能包括字符实体。用户代理应按如下方式解释属性值:用字符替换字符实体、忽略换行、用单个空格替换每个回车符或制表符。用户代理可以忽略 CDATA 属性值中的前导和尾随空格(例如,“myval”可以解释为“myval”)。作者不应使用前导或尾随空格声明属性值。
对于某些具有 CDATA 属性值的 HTML 4 属性,规范对可能无法由 DTD 表示的属性的合法值集施加了进一步的限制。
尽管 STYLE 和 SCRIPT 元素使用 CDATA 作为其数据模型,但对于这些元素,用户代理必须以不同方式处理 CDATA。标记和实体必须被视为原始文本并按原样传递给应用程序。字符序列的第一次出现 "
ID 和 NAME 标记必须以字母 ([A-Za-z]) 开头,后跟任意数量的字母、数字 ([0-9])、连字符 ("-")、下划线 ("_") , 冒号 (":") 和句点 (".")。IDREF 和 IDREFS 是对其他属性定义的 ID 令牌的引用。IDREF 是单个标记,IDREFS 是空格分隔的标记列表。NUMBER 个标记必须至少包含一位数字 ([0-9])。
仅仅因为令牌被称为 NAME 并不一定意味着它是用于 name 属性的。这只是类似术语的巧合,名称属性是与 NAME SGML 令牌不同的概念。如果您查看Index of Attributes表),您可以看到每个属性预期使用的标记类型。