2009-12-04 75 views
8

用户在其中输入数据我遇到了一个问题,如果有单引号在所有的脚本错误的。单引号与jQuery阿贾克斯

什么是处理用户输入,因此不会与jQuery的/ JavaScript的干扰单引号的最佳方式?

更新:

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

+2

提供代码示例将非常有帮助 – 2009-12-04 04:55:36

+1

您对输入做什么? – 2009-12-04 04:55:50

+0

我通过ajax将它发送到数据库。 这里是json ajax调用的数据参数。 data:“{str_”+ sectionName +“:'”+ UpdateText +“',EntityID:'”+ EntityID +“'}”, 更新文本是可以包含引号的字符串。 – Adam 2009-12-04 04:58:00

回答

3

你可以找到许多String.replaceAll实现的一个或写你自己的,只是转义版本,如\更换任何单或双引号”或\”。

21

你需要逃避与你打算如何使用您可以使用JavaScript逃生和UNESCAPE功能串\或取决于报价。

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

还检查了这一点的方法来escape strings with jQuery

+0

这工作就像一个魅力! – CodeLikeBeaker 2010-12-13 20:27:14

0

你真的应该用于消毒各种原因你的服务器端脚本里面输入。如果你只是一切都显示在用户输入那么你的应用程序可能可以被用来发动跨站点脚本攻击。

+1

相关的xkcd http://xkcd.com/327/ – thenoviceoof 2009-12-04 05:06:25

+0

我认为他的问题是,他正在尝试将数据发送到服务器时出现JavaScript错误,客户端。 – 2009-12-04 05:06:41

0

JavaScript有一个内置的方法,仅用于单引号。其称为encodeURIComponent方法,从Javascript Kit

用于一个URI的对于具有特殊意义的字符参数部分进行编码,以将它们与保留的字符,例如“&”充当键/值隔板分开。它比encodeURI()更具包容性,它将在URL字符串中编码具有特殊含义的所有字符,包括“=”和“&”。仅在URI的参数部分使用此方法;否则,如果URI包含属于有效URI一部分的字符(即:“+”),则URI可能不再有效,但如果URI参数的一部分应该转义,则该URI应该转义。

所以,你的代码应该变成:

data: "{str_" + encodeURIComponent(sectionName) + " :'" + encodeURIComponent(UpdateText) + "',EntityID: '" + encodeURIComponent(EntityID) + "' }", 

我编码的一切,我在查询字符串发送是安全的,但编码ENTITYID可以说是被忽略,因为它没有从用户来(我假设),所以你知道它不会有特殊字符。

+2

encodeURI和encodeURIComponent不会转义单引号,至少在当前版本的Chrome/Safari中不会 – 2012-02-17 14:00:51

0

感谢mbrevoort, 我更多地讨论他的回答

,当你在查询EMPID发送一个单引号=“T'via” EMPID =逃生(EMPID)

当你得到值包括单引号var xxx = request。查询字符串( “EMPID”)XXX = unscape(XXX)

如果你想搜索/插入其中包括查询XXX单引号值=替换(EMPID, “'”, “ ''”)

0

为了逃避在JavaScript中的单引号使用

UpdateText.replace('\'', '\\\'') 

逃避所有的单引号使用

UpdateText.replace(/'/g, '\\\'') 
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会照顾到这一点。

(我来到这里寻找一个有点类似的问题,但一直没找到合适的工作解决方案,因此最终公布的说明)

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注入攻击!