为什么HTML不能包含NUL字符? (转换为0xFFFD /“%EF%BF%BD”)

时间:2015-10-19 22:50:49

标签: html utf-8 nul

对于特殊值,我尝试过HTML <option value="&#0;">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字符将以类似方式替换?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

  

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