JavaScript 中的转义引号

IT技术 javascript quotes escaping
2021-01-13 05:44:18

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

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

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

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

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>
6个回答

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

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

对,但不就是这样吗?<a href="#" onclick="DoEdit('Preliminary Assessment \"Mini\"'); return false;">edit</a> 我试过了,但还是搞砸了。这必须是一个简单的WTF,但对于我的生活,我看不到它。
2021-03-11 05:44:18
在之前的评论中有一个额外的引用。有效的代码是 'mystring'.replace(/'/g, '"');
2021-03-13 05:44:18
这不是 javascript 问题,而是 HTML/XML 编码问题:您不能在属性值中使用双引号字符而不对其进行转义……否则浏览器/解析器会认为您正在结束属性值声明。
2021-03-31 05:44:18
是否有任何内置的 JavaScript 函数可以转义双引号?除了 'quo"'.replace('"', '"') 我找不到任何东西。
2021-04-04 05:44:18
示例替换代码: 'mystring'.replace(/"/g, '&quot;');
2021-04-09 05:44:18

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

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

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

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

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

替换代码: 'mystring'.replace(/"/g, '\\x22').replace(/'/g, '\\x27')
2021-03-20 05:44:18
谢谢!你的答案更正确,因为它是原生 JavaScript,无论上下文如何。
2021-03-28 05:44:18
请注意,&quot;在输入值是必需的,即<input value="\x22quoted string\x22">不起作用。
2021-04-02 05:44:18
这是正确的答案,尽管在 HTML 上下文中使用&quot;will,当然,工作。
2021-04-04 05:44:18
@10basetom 自然而然地,JavaScript 转义仅适用于 JavaScript 上下文,例如事件处理程序 ( onclick="...")。value属性的值不在 JavaScript 上下文中处理,而是在 HTML 上下文中处理。
2021-04-09 05:44:18
<html>
    <body>
        <a href="#" onclick="DoEdit('Preliminary Assessment &quot;Mini&quot;'); return false;">edit</a>
    </body>
</html>

应该做的伎俩。

伙计们,unescapeJavaScript 中已经有一个函数可以对 进行转义\"

<script type="text/javascript">
    var str="this is \"good\"";
    document.write(unescape(str))
</script>
“escape”/“unes​​cape”的组合满足了我的需求。谢谢。
2021-03-31 05:44:18
不推荐使用转义/取消转义。尽管 encodeURI 不仅仅是引号。gotochriswest.com/blog/2011/05/23/escape-unescape-deprecated
2021-04-09 05:44:18

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

<a href="#" onclick='DoEdit("Preliminary Assessment \"Mini\""); return false;'>edit</a>
oop。我想知道为什么我过去自然而然地使用 ' 作为属性。我只是从来没有深入研究过。谢谢。
2021-04-07 05:44:18