2012-02-01 87 views
1

我与我的AJAX调用发送相当多的值,如jQuery的AJAX /帐数据,其中一个查询字符串值“event_name”来自用户输入。如果用户输入符号(&)符号,则postData字符串会中断,并且不会在该符号之后发送任何内容。的符号

例案例:& EVENT_NAME = d &摹服装启动 党& set_menu =现有...

我明白了什么错误,但不是很确定最好的解决将是什么。我是否会将这些角色转换成别的东西,还是有逃避它们的方法?另外,还有其他会对脚本造成伤害的字符,例如加号(+)或减号( - )或撇号(')?

回答

3

如果你通过了POSTDATA将jQuery的地图,它将编码的组件为您提供:

var postData = { aid: aid, 
       lid: lid, 
       ... 

如果你真的需要传递一个字符串,你应该使用encodeURIComponent正确编码用户数据。

W3C有some more information on form encoding

+0

谢谢,我会读这个。有问题的字符串只是一个短名称,一个事件名称,来自我的办公室工作人员,而不是普通公众。我使用@Oybek建议的escape(变量)。 – TheCarver 2012-02-01 20:59:32

+0

'escape'函数已被弃用。最好使用更具体的'encodeURIComponent'函数。 (虽然逃生可能会奏效)。请参阅:http://stackoverflow.com/questions/75980/best-practice-escape-or-encodeuri-encodeuricomponent – 2012-02-02 14:14:02

+0

近两年我在Google上找到我的问题(这个问题)。在获得更多经验后,我现在认为这是更好的答案,所以我已将之前接受的答案换成了你的答案。 – TheCarver 2014-01-25 15:23:23

0

只需使用:

postData = encodeURIComponent (postData); 

空空之前。

escape,unescape,encodeURI,encodeURIComponent是您可能需要使用Ajax的各种方法。 但是,如果您使用转义(http://www.google.com),您还将转义://,破坏您的URI。 这就是为什么你应该使用encodeURI或encodeURIComponent。 另请参阅When are you supposed to use escape instead of encodeURI/encodeURIComponent?

+2

以这种方式转义将折叠整个查询字符串。结果将像发布像这样'http://example.com/path/?somegarbage'相同 – Oybek 2012-02-01 20:35:32

6

转义您的每个值。

var postData = "aid="+escape(aid)+"&lid="+escape(lid) ... ; 
+0

这工作非常感谢。这只是可能包含错误字符的event_name变量,所以我逃过了那一个。 – TheCarver 2012-02-01 20:54:43

1

首先使用地图。

post = { 
    "aid":aid, 
    "lid":lid, 
    "token":token 
    ... 
} 

然后生成url编码的字符串。

a=[]; 
for(var x in post){ 
    a.push(encodeURIComponent(x)+"="+encodeURIComponent(post[x])); 
} 
var postData = a.join("&"); 

更新1: 如果您正在使用jQuery不需要生成的URL编码字符串。只需通过地图。

更新2: escape并不好,因为它只有ASCII处理。所以使用encodeURIComponentWhen are you supposed to use escape instead of encodeURI/encodeURIComponent?谢谢@SamuelEdwinWard

+0

更好使用'encodeURIComponent'而不是'escape'(就像jQuery一样)。 – 2012-02-02 15:04:11

+0

@SamuelEdwinWard谢谢。更新了答案。 – 2012-02-02 15:30:29