JavaScript 中的转义引号

2022-08-30 00:43:05

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

我正在尝试输出如下标记:

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

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

Prelim Assess "Mini" Report

我尝试过将“替换为\”,但无论我尝试什么,Firefox都会在“评估”一词后面的空格后删除我的JavaScript调用,这会导致各种各样的问题。

我必须错过显而易见的答案,但对于我的生活,我无法弄清楚。

有人想指出我的愚蠢吗?

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

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

答案 1

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

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


答案 2

&quot;正如我之前所建议的那样,由于HTML上下文,在这种特殊情况下会起作用。

但是,如果您希望您的JavaScript代码在任何上下文中独立转义,则可以选择本机JavaScript编码:
成为
'\x27"\x22

因此,您的点击将变为:
DoEdit('Preliminary Assessment \x22Mini\x22');

例如,当将JavaScript字符串作为参数传递给另一个JavaScript方法时,这也可以工作(这是一种简单的测试方法)。alert()

我向您推荐重复的堆栈溢出问题,如何转义 onClick 处理程序中的 JavaScript 代码中的字符串?