在 JavaScript/HTML 中嵌套引号

IT技术 javascript html quotes
2021-03-04 19:27:06

你如何在 HTML 中嵌套超出第二级的引号?据我所知,只有两种类型的引号 - single(') 和 double(")。我知道使用斜杠转义 - 你必须在代码中转义,但转义在浏览器级别不起作用. 解决以下问题的公认方法是什么?

<p onclick="exampleFunc('<div id="divId"></div>');">Some Text</p>

该代码打印到浏览器:

');">一些文字

4个回答

您需要使用正确的转义/编码。在 HTML 中使用字符引用:

<p onclick="exampleFunc('&lt;div id=&quot;divId&quot;&gt;&lt;/div&gt;');">Some Text</p>

或者在 JavaScript 中使用字符串转义序列:

<p onclick="exampleFunc('\x3Cdiv\x20id\x3D\x22divId\x22\x3E\x3C/div\x3E');">Some Text</p>
我不清楚什么时候应该选择第一个还是第二个。我在警报中尝试了第一个(例如alert("&quot;")),并收到一个错误提示“"” 被视为实际报价,但第二种形式有效。
2021-04-26 19:27:06

编辑:这不是 HTML 中 JavaScript 的解决方案,而是仅适用于 JavaScript。我的错...

eval('eval(\"eval(\\\"alert(\\\\\\\"Now I\\\\\\\\\\\\\\\'m confused!\\\\\\\")\\\")\")');

链接这是“递归转义”。

作为一个伪装成程序员的外行,我只想说,我不是这样做的。
2021-04-27 19:27:06

    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>

这里有一些关于特殊字符的信息

不,它将 HTML 属性值终止为 `exampleFunc('<div id=`。
2021-04-25 19:27:06