2012-07-12 45 views
3

我在这里遇到问题。当我使用ajax传递一个包含“+”的参数给我的控制器时,它将被一个空格替换。ajax - 为什么jquery用空格(“”)替换“+”?

例如,我会通过使用ajax值= Tom+Jerry+Garfield。当我在我的控制器中使用System.out.println()时,它显示Tom Jerry Garfield。我尝试使用其他特殊字符,我似乎没有问题。

请帮忙。提前致谢。

+0

[URL查询部分的空格总是被编码为加号](http://tools.ietf.org/html/rfc3986#section-3.4)。所以你的控制器只是解码它们。听起来你没有正确地构建你的URL,因为它听起来像你想要一个加号(需要被编码)而不是一个空格。如果您使用%2B,它应该可以工作,但是您不应该像现在这样手动执行此操作。 – bzlm 2012-07-12 08:00:21

+0

不是jQuery正在替换字符,服务器是... – 2012-07-12 08:01:03

+0

@FelixKling你的意思是说tomcat正在这样做?这是什么解决方案? – NinjaBoy 2012-07-12 08:01:25

回答

9

在某些GETPOST请求(最有可能在URL,或者通过一种形式),空格编码为“+”(加),他们被传递到服务器之前的符号。如果您执行正常的GET请求,则可以看到此行为 - 您将看到类似google.com?q=test+example的内容。如果要通过ajax GET/POST请求传递加号,则需要对其进行“urlencode”。 +的URL编码值为%2B

还要注意:

的JavaScript encodeURIComponent方法()函数可以被使用,如在回答:

AJAX POST and Plus Sign (+) -- How to Encode?

+0

请注意,空间的“真实”编码实际上是%20,+(加号)符号实际上是替代(较旧)的形式http://stackoverflow.com/a/1634293/1407034 – compid 2012-07-12 08:10:17

2

+被解码为URL解码后的空间。如果您想通过+,则需要对其进行编码。

2

当我们将值传递给控制器​​时,有一个模型联编程序位于请求之间。当ajax调用时,url和请求被编码。解码后的url中的“”(空格)字符编码为“+”。
另一方面,模型活页夹解码请求并提取参数并将其提供给控制器,因此“+”被转换为“”。 但这里的问题是为什么会传递“+”作为分隔符?

+0

我不认为这是打算作为分隔符,但作为一个实际的加号(“汤姆加杰里加加菲猫”)。 – bzlm 2012-07-12 08:05:50

+0

@bzlm - 可能是这种情况......可能在这种情况下,%2B是要走的路。但我仍然想知道用例! – bhuvin 2012-07-12 08:09:12