【问题标题】:Why can't HTML contain a NUL character? (converted to 0xFFFD / "%EF%BF%BD")为什么 HTML 不能包含 NUL 字符? (转换为 0xFFFD / "%EF%BF%BD")
【发布时间】:2015-10-19 22:50:48
【问题描述】:

对于特殊值,我尝试了 HTML <option value="�">unspecified</option>,但似乎 NUL 字符没有在 HTML 中解释。我收到。我想知道原因,以及除了NUL 之外还有哪些不寻常的 UTF-8 字符我可能需要注意。

这是a fiddle to demonstrate 我在说什么。

<select><option value="&#0;">&#0;</option></select>

正如您在上面看到的,下拉菜单设置了 NUL 值,但是当 JavaScript 检查结果时它们被转换为 �。

var select = document.querySelector('select')
inspect()
select.options[0].value = '\u0000'
select.options[0].label = '\u0000'
inspect()
select.innerHTML = select.innerHTML
inspect()
function inspect() {
  alert(encodeURIComponent(select.options[0].value)
        + ','
        + encodeURIComponent(select.options[0].label)
        + ','
        + select.innerHTML)
}

JavaScript 可以专门将 valuelabel 设置为 \u0000 并且可以正常工作,但由于某种原因无法在 HTML 中呈现。

您能否解释原因和/或指出相关文档?是否还有其他 UTF-8 字符会以类似方式替换?

【问题讨论】:

  • 你期望它被渲染成什么?
  • NULL 在 W3C 的 HTML/XHTML 推荐中 8.2.2.5 Preprocessing the input stream 下的第二个注释中提到。它对我来说是“取决于”:P
  • @rollingBalls,我在所有三个警报中都期待%00,%00,&lt;option value="NUL"&gt;NUL&lt;/option&gt; - 其中 NUL 是 NUL 字符的特定于浏览器的表示。
  • 为什么不使用已知值,这是用于实际应用程序还是用于家庭作业?在这些情况下,空字符串、0 等可以正常工作。
  • 在这种情况下,使用已知值(以及其他值的可选前缀)当然是正确的选择。虽然已经很久没有做作业了,但确实这个问题不是针对实际问题,而是为了更好地了解 UTF-8 及其与 HTML 的关系。

标签: html utf-8 nul


【解决方案1】:

有一个character reference override table in the HTML5 spec 用于字符引用的映射。其中第一个是&amp;#0;

后面是一些散文,指出 0xD800 到 0xDFFF 或大于 0x10FFFF 范围内的数字也映射到 Unicode 替换字符。

【讨论】:

    【解决方案2】:

    NUL 无效。 HTML 是基于文本的文档。只能输入字符串。

    https://developers.whatwg.org/elements.html#attributes

    除非另有说明,否则 HTML 元素上的属性可能具有 任何字符串值,包括空字符串。除非明确 声明,对于可以在此类中指定的文本没有限制 属性。

    【讨论】:

    • 除非明确说明 NUL,否则我假设引号表示 NUL 是(或应该)被允许的 - 我一直认为 "\u0000" 符合“任何字符串值”的家庭。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 2018-10-26
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多