JavaScript函数参数中的单引号转义

我需要在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);" 

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

有没有一个函数可以让我做下面的事情?

 onclick="Javascript:function(escape(param1), escape(param2), escape(param3));" 
  JSON.stringify(plainTextStr).replace(/&/, "&").replace(/"/g, """) 

将产生一个string,你可以安全地embedded到引用的属性中,当JavaScript解释器看到时,它将具有相同的含义。

唯一需要注意的是,一些Unicode换行符(U + 2028和U + 2029)在embedded到JavaScriptstring文字之前需要转义 ,但JSON只要求转义\r\n

使用反斜杠来跳出撇号:

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

这个问题可能并不完全清楚,但是假设你只是想把这个发送到一个PHP脚本来存储在数据库中,那么你当然会理想地使用PHP的各种方法,比如stripslashes() – 但是如果你实际上并不想太花哨,只要在任何单引号之前加上1就可以从客户端向PHP发送正确的SQL查询。 这不安全 ,但也许不是必要的。

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

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

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

现在,MySQL将存储您的body就像您在表单字段中看到的一样。

这个函数为我工作(它删除并重新恢复报价):猜测要发送的数据是一个input元素的值,

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

然后再次获取原始文本:

 var originalText = decodeURIComponent(Url); 
 var cmpdetail = cmpdetail.replace(/'/g, "\\'"); 

它为我工作。

如果我正确地理解了你,我不相信你想要做什么是可能的。 您将需要在服务器端转义报价。 任何可能为你引用的函数本身都是一个函数,它需要一个有效的string,这意味着它在被传递给函数之前需要被转义。

我更喜欢用单引号来定义JavaScriptstring。 然后我逃避我的embedded双引号如下。

这是我如何做,基本上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>