你如何在 HTML 中嵌套超出第二级的引号?据我所知,只有两种类型的引号 - single(') 和 double(")。我知道使用斜杠转义 - 你必须在代码中转义,但转义在浏览器级别不起作用. 解决以下问题的公认方法是什么?
<p onclick="exampleFunc('<div id="divId"></div>');">Some Text</p>
该代码打印到浏览器:
');">一些文字
你如何在 HTML 中嵌套超出第二级的引号?据我所知,只有两种类型的引号 - single(') 和 double(")。我知道使用斜杠转义 - 你必须在代码中转义,但转义在浏览器级别不起作用. 解决以下问题的公认方法是什么?
<p onclick="exampleFunc('<div id="divId"></div>');">Some Text</p>
该代码打印到浏览器:
');">一些文字
您需要使用正确的转义/编码。在 HTML 中使用字符引用:
<p onclick="exampleFunc('<div id="divId"></div>');">Some Text</p>
或者在 JavaScript 中使用字符串转义序列:
<p onclick="exampleFunc('\x3Cdiv\x20id\x3D\x22divId\x22\x3E\x3C/div\x3E');">Some Text</p>
编辑:这不是 HTML 中 JavaScript 的解决方案,而是仅适用于 JavaScript。我的错...
eval('eval(\"eval(\\\"alert(\\\\\\\"Now I\\\\\\\\\\\\\\\'m confused!\\\\\\\")\\\")\")');
链接。这是“递归转义”。
const _advanceEscapeCount = (escapeCount, level) => {
const linearPosition = Math.log(escapeCount + 1) / Math.log(2);
return Math.pow(2, (linearPosition + level)) - 1;
};
const deepNestQuotes = (str, level) => {
for (let i = str.length - 1; i >=0 ; i--) {
if (str[i] === '"') {
const index = i;
let count = 0;
while (str[i - 1] === '\\') {
count++;
i--;
}
const firstPart = str.substr(0,index - count);
const lastPart = str.substr(index,str.length);
const escapedCount = _advanceEscapeCount(count, level);
str = firstPart + '\\'.repeat(escapedCount) + lastPart;
//str = firstPart + escapedCount + lastPart;
}
}
return str;
};
deepNestQuotes("1st-level-begin \"2nd-begin \\\"3rd-begin \\\\\\\"4th level\\\\\\\" 3rd-end\\\" 2nd-end\" 1st-level-end", 1);
deepNestQuotes("1st-level-begin \"2nd-begin \\\"3rd-begin \\\\\\\"4th level\\\\\\\" 3rd-end\\\" 2nd-end\" 1st-level-end", 2);
您需要使用 \ 对字符进行转义
所以你的代码应该看起来像
<p onclick="exampleFunc('<div id=\"divId\"></div>');">Some Text</p>
这里有一些关于特殊字符的信息