【问题标题】:Nesting quotes in JavaScript/HTML在 JavaScript/HTML 中嵌套引号
【发布时间】:2011-03-03 15:46:49
【问题描述】:

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

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

该代码打印到浏览器:

');">一些文字

【问题讨论】:

    标签: javascript html quotes


    【解决方案1】:

    您需要使用正确的转义/编码。在 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("&amp;quot;")),并收到提示“&”的错误被视为实际报价,但第二种形式有效。
    【解决方案2】:

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

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

    Link。这是“递归转义”。

    【讨论】:

    • 作为一个伪装程序员的外行,我只想说,我不是这样做的。
    【解决方案3】:

        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);

    【讨论】:

      【解决方案4】:

      您需要使用 \ 转义字符

      所以你的代码应该是这样的

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

      这是Special Characters的一些信息

      【讨论】:

      • 否,将 HTML 属性值终止为 `exampleFunc('
      猜你喜欢
      • 2010-11-30
      • 1970-01-01
      • 2015-12-02
      • 2017-09-19
      • 1970-01-01
      • 2011-09-30
      • 2023-03-23
      • 2011-10-04
      • 2017-12-10
      相关资源
      最近更新 更多