HTML 不显示已解码的 %3C?
HTML does not show decoded %3C?
以下代码块相似,但输入字符串不同,因此结果不同:
// This does not change HTML
var str = "%3Cdiv%3E"; // <div>
var str_dec = decodeURIComponent(str);
console.log(str_dec); // Console output is `<div>`
document.getElementById("p1").innerHTML = "1: " + str_dec; // No HTML output
// This works fine within HTML
var str = "%3C0%3E"; // <0>
var str_dec = decodeURIComponent(str);
console.log(str_dec); // Console output is `<0>`
document.getElementById("p2").innerHTML = "2: " + str_dec; // HTML output is `<0>`
<p id="p1"></p>
<p id="p2"></p>
尽管控制台显示解码在第一种情况下工作正常,但为什么它没有出现在 HTML 中?
Although, console shows that decoding works fine in first case, why it
does not appear in the HTML?
一个 <div>
元素在 <p>
元素的结果 .innerHTML
中。
"<div>"
在结果 html
.
中创建 <div></div>
这是因为 <0>
不是有效的 HTML 标签,因为 SGML(HTML 曾经派生自的语言)标签不能以数字开头:
The element name immediately follows the tag open delimiter. An element name consist of a letter followed by up to 72 letters, digits, periods, or hyphens. Names are not case sensitive.
https://www.w3.org/MarkUp/html3/HTMLandSGML.html
由于代码正在分配 Element
的 innerHTML
属性,浏览器会尝试将值解析为 HTML 而不会处理 <0>
作为 HTML 元素,而不是选择将其视为文本值;而 <div>
是一个有效的 HTML 元素,因此浏览器会这样对待它。
如果您检查控制台中的输出,您实际上会在段落 p1
中看到一个空的 <div>
DOM 节点(以及字符串 <0>
p2
):
如果您不希望浏览器将分配的值解析为 HTML,请改用更安全、更简单的 textContent
属性。
以下代码块相似,但输入字符串不同,因此结果不同:
// This does not change HTML
var str = "%3Cdiv%3E"; // <div>
var str_dec = decodeURIComponent(str);
console.log(str_dec); // Console output is `<div>`
document.getElementById("p1").innerHTML = "1: " + str_dec; // No HTML output
// This works fine within HTML
var str = "%3C0%3E"; // <0>
var str_dec = decodeURIComponent(str);
console.log(str_dec); // Console output is `<0>`
document.getElementById("p2").innerHTML = "2: " + str_dec; // HTML output is `<0>`
<p id="p1"></p>
<p id="p2"></p>
尽管控制台显示解码在第一种情况下工作正常,但为什么它没有出现在 HTML 中?
Although, console shows that decoding works fine in first case, why it does not appear in the HTML?
一个 <div>
元素在 <p>
元素的结果 .innerHTML
中。
"<div>"
在结果 html
.
<div></div>
这是因为 <0>
不是有效的 HTML 标签,因为 SGML(HTML 曾经派生自的语言)标签不能以数字开头:
The element name immediately follows the tag open delimiter. An element name consist of a letter followed by up to 72 letters, digits, periods, or hyphens. Names are not case sensitive.
https://www.w3.org/MarkUp/html3/HTMLandSGML.html
由于代码正在分配 Element
的 innerHTML
属性,浏览器会尝试将值解析为 HTML 而不会处理 <0>
作为 HTML 元素,而不是选择将其视为文本值;而 <div>
是一个有效的 HTML 元素,因此浏览器会这样对待它。
如果您检查控制台中的输出,您实际上会在段落 p1
中看到一个空的 <div>
DOM 节点(以及字符串 <0>
p2
):
如果您不希望浏览器将分配的值解析为 HTML,请改用更安全、更简单的 textContent
属性。