我遇到了用户输入数据的问题,如果有单引号,脚本就会出错。
处理用户输入的单引号的最佳方法是什么,这样才不会干扰jquery / javascript?
更新:
我通过ajax将它发送到数据库。这是json ajax调用的数据参数
data: "{str_" + sectionName + " :'" + UpdateText + "',EntityID: '" + EntityID + "' }",
更新文本是可以包含引号的字符串。
答案 0 :(得分:21)
您需要使用\来转义引号,或者取决于您计划如何使用字符串,您可以使用javascript转义和unescape函数。
alert(escape("mike's"));
alert(unescape(escape("mike's")));
的方法
答案 1 :(得分:3)
您可以找到许多String.replaceAll实现中的一个或编写自己的实现,只需用转义版本替换任何单引号或双引号,如\“或\”。
答案 2 :(得分:3)
对于AJAX请求中的转义值,不要编写自己的转义实现或使用escape()方法。 (不推荐使用escape()
) 。而是创建一个JSON对象并使用JSON.stringify
方法。
对于你的情况,它应该像(暂时忽略动态属性):
//Create Javascript object
var obj = { SectionName: UpdateText, EntityID: EntityID };
稍后在您的ajax请求中,您可以执行以下操作:
data: JSON.stringify(obj),
如果您想对JSON对象使用动态属性,那么对于您的特定情况,您可以通过两个步骤创建对象:
var obj = { EntityID: EntityID };
obj["str_" + sectionName] = UpdateText;
此练习可以避免手动转义单/双引号和其他无效字符。 JSON.stringify
会照顾到这一点。
(我来到这里寻找一个类似的问题,但无法找到合适的工作解决方案,所以最后在这里发布了一个)
答案 3 :(得分:1)
由于您提到了AJAX,因此涉及单引号的字符串可能会在服务器端被拒绝。
在插入字符串之前,请确保使用提供的escape string function
(例如php)到数据库。
$user_name = $_REQUEST['username'];
$user_name = mysqli_real_escape_string($conn,$user_name);
$query = "INSERT into chat(username,message) VALUES('".$user_name."')";
这有助于转发可能出现在' $ user_name'中的任何单引号或双引号。串。 它还可以防止任何类型的SQL注入攻击!
答案 4 :(得分:0)
出于各种原因,您应该在服务器端脚本中清理输入。如果您只是显示用户输入的所有内容,那么您的应用程序可能会用于启动跨站点脚本攻击。
答案 5 :(得分:0)
Javascript有一个内置方法,仅用于覆盖单引号。它名为encodeURIComponent,来自Javascript Kit:
用于对具有特殊含义的字符的URI的参数部分进行编码,以将它们与保留字符(例如“&”)分开。充当键/值分隔符。比encodeURI()更具包容性,它对URL字符串中具有特殊含义的所有字符进行编码,包括“=”和“&”。仅在URI的参数部分使用此方法;否则,如果URI包含属于有效URI的一个字符(即:“+”),则URI可能不再有效,但如果URI参数的一部分,则应该对其进行转义。
所以你的代码应该成为:
data: "{str_" + encodeURIComponent(sectionName) + " :'" + encodeURIComponent(UpdateText) + "',EntityID: '" + encodeURIComponent(EntityID) + "' }",
我将查询字符串中发送的所有内容编码为安全,但编码EntityID可能会被跳过,因为它不是来自用户(我假设),所以你知道它不会有特殊字符
答案 6 :(得分:0)
感谢mbrevoort, 我详细说明了他的答案
在查询中发送单引号时
empid = " T'via"
empid = escape(empid)
当您获得包含单引号的值时
var xxx = request.QueryString("empid")
xxx = unscape(xxx)
如果要在查询中搜索/插入包含单引号的值
xxx = Replace(empid, "'", "''")
答案 7 :(得分:0)
要在Javascript中使用单引号转义
.blanline2 input{
position:absolute;
bottom:0;
}
要转义所有单引号,请使用
UpdateText.replace('\'', '\\\'')
答案 8 :(得分:0)
可接受的答案不应用作解决方案。
为了通过 AJAX 将其发送到 DB ,其中请求数据具有单引号 {{1} },请执行以下操作:
'
var data = {
"sectionName" : sectionName,
"UpdateText" : updateText,
"EntityID" : entityID
}
data = JSON.stringify(data);
$.ajax({
url: "",
type: "POST",
data: data,
contentType: "application/json; charset=utf-8",
dataType: "json"
}).done(function (res) {
alert(res);
});
替换为双引号'
,以转义单引号引用。''