45

我需要在 JavaScript 函数参数中转义单引号以避免这种情况:

onclick="Javascript:INSERT_PRODUCT('188267','WILL AND GRACE','32311','L'ANNIVERSARIO DINOZZE ','20101113|04|18|','13/11/2010 0.00.00','CANALE 5  ',this);"

但是我需要在函数调用中转义它们,因为我不知道将传递的值(我无法从数据库中转义的 db 变量)。

是否有允许我执行以下操作的功能?

onclick="Javascript:function(escape(param1), escape(param2), escape(param3));"
4

7 回答 7

19
 JSON.stringify(plainTextStr).replace(/&/, "&").replace(/"/g, """)

将生成一个字符串,您可以安全地将其嵌入到带引号的属性中,并且在被 JavaScript 解释器看到时具有相同的含义。

唯一需要注意的是,一些Unicode换行符(U+2028 和 U+2029)在嵌入 JavaScript 字符串文字之前需要转义\r,但 JSON 只需要转义并\n转义。

于 2012-01-05T14:52:34.300 回答
11

用反斜杠转义撇号:

onclick="INSERT_PRODUCT('188267','WILL AND GRACE ','32311','L\'ANNIVERSARIO DI NOZZE ','20101113|04|18|','13/11/2010 0.00.00','CANALE 5 ',this);"
于 2012-01-05T14:46:42.600 回答
7

从问题中可能并不完全清楚,但假设您只想将其发送到 PHP 脚本以存储在数据库中,您当然会理想地利用 PHP 的各种方法,例如stripslashes()- 但如果您真的不尝试太花哨了,只需在任何单引号前添加 1 个斜杠就足以从客户端将 SQL 查询直接发送到 PHP。这不安全,但也可能没有必要。

str.replace(/'/g, "\\'"); // escaping \ with \, so used 2x

做的伎俩。,例如在这样的事情中:

var body = $('#body').val().replace(/'/g, "\\'");
myCustomSQLqueryFunction("UPDATE mytable SET `content`='"+ body +"';" );

MySQL 现在会将您body在表单字段中看到的内容存储起来。

于 2013-02-07T01:20:36.790 回答
3

这个函数对我有用(它再次删除并恢复引用):猜测要发送的数据是输入元素的值,

var Url = encodeURIComponent($('#userInput').val().replace("'","\\'"));

然后再次获取原文:

var originalText = decodeURIComponent(Url);
于 2014-11-28T17:21:49.350 回答
1
var cmpdetail = cmpdetail.replace(/'/g, "\\'");

它为我工作。

于 2015-12-15T05:53:00.553 回答
0

我更喜欢使用单引号来定义 JavaScript 字符串。然后我按如下方式转义我嵌入的双引号。

这就是我的做法,基本上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\"
<span id="output"></span>

于 2016-05-31T00:17:05.347 回答
0

最近遇到了类似的问题,通过将单引号替换成对应的unicode( &#39;)解决了

最初我的代码是这样的,导致我得到的结果被截断(例如Jane's Coffee,只是Jane在输出中)。

b.innerHTML += "<input type='hidden' value='" + arr[i] + "'>";

当我引入 unicode 替换(如下所示)时,我得到了我想要的确切输出

b.innerHTML += "<input type='hidden' value='" + arr[i].replace("'", "&#39;") + "'>";
于 2021-10-03T11:21:30.780 回答