带有jQuery ajax的字符串中的单引号

时间:2009-12-04 04:51:36

标签: javascript jquery string escaping

我遇到了用户输入数据的问题,如果有单引号,脚本就会出错。

处理用户输入的单引号的最佳方法是什么,这样才不会干扰jquery / javascript?

更新:

我通过ajax将它发送到数据库。这是json ajax调用的数据参数  data: "{str_" + sectionName + " :'" + UpdateText + "',EntityID: '" + EntityID + "' }",
更新文本是可以包含引号的字符串。

9 个答案:

答案 0 :(得分:21)

您需要使用\来转义引号,或者取决于您计划如何使用字符串,您可以使用javascript转义和unescape函数。

alert(escape("mike's"));
alert(unescape(escape("mike's")));

另请查看escape strings with jQuery

的方法

答案 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} },请执行以下操作:

  1. 将您的请求数据组织为对象
'
  1. Stringfy 将您的数据转换为 JSON 并使用 AJAX
  2. 发送
var data = {
  "sectionName" : sectionName, 
  "UpdateText" : updateText,
  "EntityID"  : entityID
}
  1. 取决于数据库,对于 SQL Server ,将单引号data = JSON.stringify(data); $.ajax({ url: "", type: "POST", data: data, contentType: "application/json; charset=utf-8", dataType: "json" }).done(function (res) { alert(res); }); 替换为双引号',以转义单引号引用
''