2015-11-06 99 views
1

所以我下面的PHP代码:PHP GET +符号?

echo $_GET["r"]; 

这是很简单..

但是,当我请求PHP文件是这样的:....php?r=123+123,它吐出“123 123”,而不是带加号的“123 + 123”。为什么会发生这种情况,我该如何解决?

我曾尝试:

echo urlencode($_GET["r"]); 

其中的作品,但是,这是一个非常简单的例子,如果我是设置为变量:

$r = urlencode($_GET["r"]); 

变量$r将被设置到123%2B123而不是123+123,我希望变量$r设置为真实加号,而不是%2B?

+2

URL编码/解码找到更多的信息? http://php.net/manual/en/function.urlencode.php – Maximus2012

+0

@ Maximus2012 sry,让我编辑.. – super

+4

'+'编码URL查询字符串中的空格。但您可以[使用%2B传输加号](https://en.wikipedia.org/wiki/Percent-encoding),'.... php?r = 123%2B123' – VolkerK

回答

0

加号是URL中的重新分割字符。 直接调用php脚本时,它会导致空格字符。

当你需要发送一个加号时,没有办法绕开url编码,就像已经在评论中建议的那样。

0

所以,我发现它,而不是urlencode,我只是使用RAWurlencode!

0

URL php?r = 123 + 123被解码为“123 123”被空格分开,而不是加号。要正确解码,请将其编码为php?r = 123%2B123。即使你写了你不希望如此,请考虑这种正确的行为。

空格字符在application/x-www-form-urlencoded键值对中编码为“+”。

RFC-1866(HTML 2.0规范)第8.2.1节。第1项说:“表单字段名称和值被转义:空格字符被替换为'+',然后保留字符被转义”)。

以下是RFC-1866允许将空格编码为加号的URL中的这种字符串的示例:“http://example.com/over/there?name=foo+bar”。所以在“?”之后,空格被替换为加号。这种编码形式数据的方式也在稍后的HTML规范中给出,例如,在HTML 4.01规范中寻找关于application/x-www-form-urlencoded的相关段落,等等。

由于对用urlencode和rawurlencode,请urlencode vs rawurlencode?