JavaScript中如何转义引号

253

我正在从数据库输出值(它不是公开的输入,但用户在公司可以进行输入 - 这意味着,我不担心XSS)。

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

<a href="" onclick="DoEdit('DESCRIPTION');">Click Me</a>

DESCRIPTION其实是来自数据库的一个值,类似于这样:

Prelim Assess "Mini" Report
我尝试用 \ 替换 ",但无论我尝试什么,Firefox都会在单词 Assess 后的空格处截断我的 JavaScript 调用,这导致了各种问题。 我一定是错过了显而易见的答案,但是我无论如何都想不出来。 有人能指出我的愚蠢吗? 以下是整个 HTML 页面(最终将成为 ASP.NET 页面,但为了解决此问题,我除了问题代码之外删除了其他所有内容)。
<html>
    <body>
        <a href="#" onclick="DoEdit('Preliminary Assessment \"Mini\"'); return false;">edit</a>
    </body>
</html>

3
onclick事件的绑定方式改为不显眼的,并将所有数据库信息移入数据岛中是一个好主意。这样可以使代码更加清晰,当字符串转义出错时,还能获得某种语法错误提示。 - Justin Johnson
1
可能是重复的问题,参考 *如何在onClick处理程序内部的JavaScript代码中转义字符串?*。 - Peter Mortensen
你也可以使用 escape("string") 和 unescape("string") jQuery 方法。 - Abhiram
13个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
0

同样要转义空格。听起来 Firefox 假定有三个参数而不是一个。&nbsp; 是不间断空格字符。即使它不是整个问题的原因,这仍然是个好主意。


0

你需要使用双反斜杠转义引号。

这种方式会失败(由 PHP 的 json_encode 生成):

<script>
  var jsonString = '[{"key":"my \"value\" "}]';
  var parsedJson = JSON.parse(jsonString);
</script>

这个有效:

<script>
  var jsonString = '[{"key":"my \\"value\\" "}]';
  var parsedJson = JSON.parse(jsonString);
</script>

-2
你可以使用 escape() 和 unescape() jQuery 方法。像下面这样, 使用 escape(str); 来转义字符串,然后使用 unescape(str_esc); 恢复。

1
不建议使用escape()函数,应该使用encodeURI()encodeURIComponent()代替。https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/escape - dearsina

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,