简体   繁体   English

JavaScript function 参数中的单引号转义

[英]Single quote escape in JavaScript function parameters

I need to escape single quotes in JavaScript function parameters to avoid this:我需要在 JavaScript function 参数中转义单引号以避免这种情况:

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

But I need to escape them inside a function call since I do not know the values that will be passed (db variables I can't escape from the database).但是我需要在 function 调用中转义它们,因为我不知道将传递的值(我无法从数据库中转义的 db 变量)。

Is there a function that allows me to do something like the following?是否有 function 允许我执行以下操作?

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

will produce a string you can safely embed in a quoted attribute and which will have the same meaning when seen by the JavaScript interpreter.将生成一个字符串,您可以安全地嵌入到带引号的属性中,并且在 JavaScript 解释器看到时具有相同的含义。

The only caveat is that some Unicode newlines (U+2028 and U+2029) need to be escaped before being embedded in JavaScript string literals, but JSON only requires that \\r and \\n be escaped.唯一需要注意的是,某些Unicode换行符(U+2028 和 U+2029)在嵌入 JavaScript 字符串文字之前需要转义,但 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);"

It's maybe not totally clear from the question, but assuming that all you want is to send this to a PHP script for storing in a database, you of course would ideally utilize PHP's various methods such as stripslashes() -- but if you're really not trying to get too fancy, simply adding 1 slash in front of any single quote is enough to send a SQL query right into PHP from the client-side.从问题中可能并不完全清楚,但假设您想要的只是将其发送到 PHP 脚本以存储在数据库中,那么您当然会理想地使用 PHP 的各种方法,例如stripslashes() -- 但如果您是真的不要太花哨,只需在任何单引号前添加 1 个斜杠就足以从客户端将 SQL 查询直接发送到 PHP 中。 It's not safe , but maybe not necessary either.不安全,但也许也没有必要。

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

does the trick., like for example in something like this:有诀窍。,例如在这样的事情中:

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

MySQL will now store your body like you see it in the form field. MySQL 现在将像您在表单字段中看到的那样存储您的body

This function worked for me (it removes and restores the quote again): Guessing that the data to be sent is the value of an input element,这个函数对我有用(它再次删除并恢复引用):猜测要发送的数据是输入元素的值,

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

Then get the original text again:然后再次获取原文:

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

它为我工作。

I prefer to use single quote for defining JavaScript strings.我更喜欢使用单引号来定义 JavaScript 字符串。 Then I escape my embedded double quotes as follows.然后我按如下方式转义嵌入的双引号。

This is how I do it, basically str.replace(/[\\""]/g, '\\\\"') .我就是这样做的,基本上是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>

I encountered a similar issue recently, and solved it by replacing the single quote with the corresponding unicode ( &#39; )我最近遇到了类似的问题,通过将单引号替换为相应的 unicode ( &#39; ) 解决了

Initially my code was this, resulting in me getting results that were cut off (eg Jane's Coffee became just Jane in the output).最初我的代码是这样的,导致我得到的结果被截断了(例如Jane's Coffee在输出中变成了Jane )。

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

When I introduced unicode replacement (shown below), I got the exact output I wanted当我引入 unicode 替换(如下所示)时,我得到了我想要的确切 output

b.innerHTML += "<input type='hidden' value='" + arr[i].replace("'", "&#39;") + "'>";

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM