在JavaScript中转义引号

Mat*_*wdy 204 javascript quotes escaping

我正在从数据库中输出值(它不是真正对公共条目开放,但它可以由公司的用户输入 - 这意味着,我不担心XSS.)

我正在尝试输出这样的标签:

<a href="" onclick="DoEdit('DESCRIPTION');">Click Me</a>
Run Code Online (Sandbox Code Playgroud)

DESCRIPTION实际上是数据库中的值,如下所示:

Prelim Assess "Mini" Report
Run Code Online (Sandbox Code Playgroud)

我已经尝试用"替换"代替,但无论我尝试什么,Firefox都会在" 评估 "一词之后的空格之后切断我的JavaScript调用,这会导致各种各样的问题.

我必须得到明显的答案,但对于我的生活,我无法理解.

有人想指出我的愚蠢吗?

这是整个HTML页面(最终它将是一个ASP.NET页面,但为了解决这个问题,我除了问题代码之外还拿出了其他所有内容)

<html>
    <body>
        <a href="#" onclick="DoEdit('Preliminary Assessment \"Mini\"'); return false;">edit</a>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

Aar*_*ron 203

您需要转义要写入的字符串DoEdit以清除双引号字符.它们导致onclickHTML属性过早关闭.

\在HTML上下文中使用JavaScript转义字符是不够的.您需要使用正确的XML实体表示替换双引号&quot;.

  • 示例替换代码:`'mystring'.replace(/"/ g,'&quot;');` (21认同)
  • 显然我看不懂.谢谢你的回答. (17认同)
  • 这不是一个javascript问题,它是一个HTML/XML编码问题:你不能在属性值中包含双引号字符而不会转义它们......否则浏览器/解析器会认为你正在结束属性值声明. (4认同)
  • 在之前的评论中有一个额外的报价.有效的代码是'mystring'.replace(/'/ g,'&quot;'); (3认同)

tse*_*mer 91

&quot; 因为HTML上下文,我会在这个特殊情况下工作,正如我之前所建议的那样.

但是,如果你希望你的JavaScript代码能够独立逃过任何情况下,你可以选择本地JavaScript编码:
'\x27
"\x22

所以你的onclick会变成:
DoEdit('Preliminary Assessment \x22Mini\x22');

例如,当将JavaScript字符串作为参数传递给另一个JavaScript方法(这alert()是一个简单的测试方法)时,这也会起作用.

我指的是重复的Stack Overflow问题,如何在onClick处理程序中转义JavaScript代码中的字符串?.

  • 谢谢!你的答案更正确,因为无论上下文如何,它都是本机JavaScript. (2认同)
  • 这是正确的答案,尽管在 HTML 上下文中使用“”当然会起作用。 (2认同)

kri*_*ian 33

<html>
    <body>
        <a href="#" onclick="DoEdit('Preliminary Assessment &quot;Mini&quot;'); return false;">edit</a>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.


roh*_*dev 23

伙计们,已经有了unescapeJavaScript中的功能,可以解决这个问题\":

<script type="text/javascript">
    var str="this is \"good\"";
    document.write(unescape(str))
</script>
Run Code Online (Sandbox Code Playgroud)

  • escape/unescape已弃用.虽然encodeURI不仅仅是引用.http://gotochriswest.com/blog/2011/05/23/escape-unescape-deprecated/ (7认同)
  • "逃脱"/"unes​​cape"的组合做了我需要的.谢谢. (2认同)

dl.*_*dl. 12

问题是HTML无法识别转义字符.您可以通过使用HTML属性的单引号和onclick的双引号来解决这个问题.

<a href="#" onclick='DoEdit("Preliminary Assessment \"Mini\""); return false;'>edit</a>
Run Code Online (Sandbox Code Playgroud)

  • 让人惊讶.我想知道为什么我自然而然地使用'过去的属性'.我从来没有深入研究过这一切.谢谢. (5认同)

Ron*_*ton 6

我基本上就是这样做的str.replace(/[\""]/g, '\\"').

var display = document.getElementById('output');
var str = 'class="whatever-foo__input" id="node-key"';
display.innerHTML = str.replace(/[\""]/g, '\\"');

//will return class=\"whatever-foo__input\" id=\"node-key\"
Run Code Online (Sandbox Code Playgroud)
<span id="output"></span>
Run Code Online (Sandbox Code Playgroud)