代码之家  ›  专栏  ›  技术社区  ›  Tristan

为什么我需要在javascript中转义“/”字符?[复制品]

  •  6
  • Tristan  · 技术社区  · 15 年前

    需要在javascript字符串中转义的内容。或者更具体地说,为什么

    var snaphtml = '<script src="http://seadragon.com/embed/lxe.js?width=auto&height=400px"></script>';
    

    给出语法错误?逃离决赛 <\/script> 似乎修复了语法错误,但作为一个javascript初学者,这对我来说没有意义。

    4 回复  |  直到 13 年前
        1
  •  11
  •   Michael Burr    15 年前

    问题可能是Web浏览器看到 </script> “排序并决定这是脚本块的结尾。

    除了使用转义序列之外,解决问题的另一种方法是将其拆分为两个串联的字符串:

    "<" + "/script>" 
    

    你看到的行为并不是浏览器中的错误。

    浏览器不会“查看”脚本块,它们只是将内容传递给脚本引擎。“ </Script & Gt; “序列就是它们知道它们已经到达块的末尾的方式,而且由于浏览器不解释块的内容,因此它无法知道它在脚本代码中的文本字符串的上下文中。

    请记住,浏览器可以支持更多的脚本语言,而不仅仅是JavaScript,即使它并不常见。Internet Explorer支持vbscript(我认为任何可以由Windows脚本宿主运行的脚本语言,但我不确定)。当把脚本块的功能放回浏览器的时候,没有人能确定JavaScript最终会是如此通用。

        2
  •  4
  •   Justin Ludwig    15 年前

    您实际上遇到了一个HTML转义问题:浏览器解释 </script> 在字符串中作为 script 嵌入了您的javascript的元素——所以对于浏览器来说,您的行似乎缺少右单引号:

    var snaphtml = '<script src="http://seadragon.com/embed/lxe.js?width=auto&height=400px">
    

    要修复它,正如你所发现的,你只需要改变 </Script & Gt; 其他的,比如 <\/script> \074/script> 等。

    在javascript字符串中,您通常需要担心的唯一字符是双引号(如果用双引号引用字符串)、单引号(如果用单引号引用字符串)、反斜杠、回车符(\r)或换行符(\n)。

        3
  •  2
  •   Christian C. Salvadó    15 年前

    HTML分析器将解释标记结束标记(etago分隔符 </ )在字符串中,作为当前脚本标记的结尾,将 未终止的字符串 SyntaxError .

    有几种解决方法,包括使用 CDATA 块,但最简单的方法是转义该字符或进行字符串连接:

    var snaphtml = '<script src="...">\x3C/script>';
    
    var snaphtml = '<script src="..."><' + '/script>';
    

    当然,你也可以 script 以编程方式将元素附加到头部:

    var newScript = document.createElement("script");
    newScript.src = "..."; 
    //...
    
        4
  •  1
  •   Mathias Bynens    13 年前

    Everything you always wanted to know about </ , aka. the end-tag open (ETAGO) delimiter 详细解释。tl;dr there_s no need for crazy hack like string concatenation or char literal escape s_

    var snaphtml = '<\/script>';
    

    另外,请注意,这只对内联脚本是必需的。