【发布时间】:2015-10-19 22:50:48
【问题描述】:
对于特殊值,我尝试了 HTML <option value="&#0;">unspecified</option>,但似乎 NUL 字符没有在 HTML 中解释。我收到�。我想知道原因,以及除了NUL 之外还有哪些不寻常的 UTF-8 字符我可能需要注意。
这是a fiddle to demonstrate 我在说什么。
<select><option value="�">�</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 可以专门将 value 和 label 设置为 \u0000 并且可以正常工作,但由于某种原因无法在 HTML 中呈现。
您能否解释原因和/或指出相关文档?是否还有其他 UTF-8 字符会以类似方式替换?
【问题讨论】:
-
你期望它被渲染成什么?
-
NULL在 W3C 的 HTML/XHTML 推荐中 8.2.2.5 Preprocessing the input stream 下的第二个注释中提到。它对我来说是“取决于”:P -
@rollingBalls,我在所有三个警报中都期待
%00,%00,<option value="NUL">NUL</option>- 其中 NUL 是 NUL 字符的特定于浏览器的表示。 -
为什么不使用已知值,这是用于实际应用程序还是用于家庭作业?在这些情况下,空字符串、0 等可以正常工作。
-
在这种情况下,使用已知值(以及其他值的可选前缀)当然是正确的选择。虽然已经很久没有做作业了,但确实这个问题不是针对实际问题,而是为了更好地了解 UTF-8 及其与 HTML 的关系。