PHP:rawurldecode()不显示加号

PHP:rawurldecode()不显示加号,php,urldecode,Php,Urldecode,我有这样一个URL: abc.com/my+string $parts = explode('/', 'abc.com/my+string'); // => Array(2) echo $parts[1] ?? 'not found'; // => string|not found 当我得到这个参数时,它显然用一个空格替换了+,所以我得到了我的字符串 我将url中的+替换为%2B,然后使用rawurldecode(),但结果相同。尝试使用urldecod

我有这样一个URL:

abc.com/my+string
$parts = explode('/', 'abc.com/my+string'); // => Array(2)
echo $parts[1] ?? 'not found';              // => string|not found
当我得到这个参数时,它显然用一个空格替换了
+
,所以我得到了
我的字符串

我将url中的
+
替换为
%2B
,然后使用
rawurldecode()
,但结果相同。尝试使用
urldecode()
,但仍然无法在变量中获得
加号,它始终是一个空白

如果我遗漏了什么,我如何从url
abc.com/my%2Bstring
中准确地获取PHP中的
my+string

谢谢你这样说:

echo urldecode("abc.com/my%2Bstring");      // => abc.com/my+string
echo PHP_EOL;
echo rawurldecode("abc.com/my%2Bstring");   // => abc.com/my+string
此外,如果您想要获得实际的
my+字符串
,您可以利用PHP本身的强大功能,尽管您必须在其中提供完整的URL

另一种方法是通过一个
/
来获取该值,如下所示:

abc.com/my+string
$parts = explode('/', 'abc.com/my+string'); // => Array(2)
echo $parts[1] ?? 'not found';              // => string|not found
另外,请阅读关于:和的文档

.

像这样:

echo urldecode("abc.com/my%2Bstring");      // => abc.com/my+string
echo PHP_EOL;
echo rawurldecode("abc.com/my%2Bstring");   // => abc.com/my+string
此外,如果您想要获得实际的
my+字符串
,您可以利用PHP本身的强大功能,尽管您必须在其中提供完整的URL

另一种方法是通过一个
/
来获取该值,如下所示:

abc.com/my+string
$parts = explode('/', 'abc.com/my+string'); // => Array(2)
echo $parts[1] ?? 'not found';              // => string|not found
另外,请阅读关于:和的文档


abc.com?var=my%2Bstring
->
$\u GET['var']
将包含
my+字符串

这里的问题是URL重写在起作用。正如他解释的那样

mod_rewrite必须在映射URL之前取消对URL的扫描,因此反向引用在应用它们时将取消扫描

因此mod_rewrite将
my%2Bstring
解码为
my+string
,当您将其重写为查询字符串参数时,您实际上得到了
?var=my+string
。当PHP对该值应用自动URL解码时,
+
将成为一个简单的空间


[B]
标志的存在使mod_rewrite重新编码该值。

一般来说,您不需要手动URL解码获取参数值,因为PHP已经自动为您完成了这项工作
abc.com?var=my%2Bstring
->
$\u GET['var']
将包含
my+字符串

这里的问题是URL重写在起作用。正如他解释的那样

mod_rewrite必须在映射URL之前取消对URL的扫描,因此反向引用在应用它们时将取消扫描

因此mod_rewrite将
my%2Bstring
解码为
my+string
,当您将其重写为查询字符串参数时,您实际上得到了
?var=my+string
。当PHP对该值应用自动URL解码时,
+
将成为一个简单的空间


存在
[B]
标志,以使mod_rewrite重新编码该值。

“然后我使用rawurldecode()”-根据从何处/如何获得的确切值?在应用rawurldecode之前,这个值是多少?我认为这是显而易见的。在$\u GET参数上。abc.com?var=my%2bstring您的示例甚至没有GET参数,所以“显而易见”。。。从什么时候开始,我们URL解码手动获取参数值?我们没有,因为PHP已经为我们做到了这一点
abc.com?var=my%2Bstring
->$\u GET['var']将包含
my+字符串
对此表示抱歉。该url由htaccess重新编写,当我获取var参数时,它总是返回一个空格而不是加号。尝试了所有的解码功能,但都是一样的。您知道使用htaccess重新写入是否会导致此问题吗?谢谢是的,重写可能很容易成为这里的问题-存在
B
标志以防止此类问题,请参阅“然后我使用rawurldecode()”-关于从何处/如何获得的确切值?在应用rawurldecode之前,这个值是多少?我认为这是显而易见的。在$\u GET参数上。abc.com?var=my%2bstring您的示例甚至没有GET参数,所以“显而易见”。。。从什么时候开始,我们URL解码手动获取参数值?我们没有,因为PHP已经为我们做到了这一点
abc.com?var=my%2Bstring
->$\u GET['var']将包含
my+字符串
对此表示抱歉。该url由htaccess重新编写,当我获取var参数时,它总是返回一个空格而不是加号。尝试了所有的解码功能,但都是一样的。您知道使用htaccess重新写入是否会导致此问题吗?谢谢是的,重写很容易成为这里的问题-存在
B
标志以防止此类问题,请看我最后不得不使用explode,您知道使用htaccess重写是否会导致此问题吗?因为使用decode函数不起作用,所以它总是返回带有空格而不是加号的字符串。谢谢,我怀疑。但是,请向我们提供有关您的web服务器、PHP配置、您如何接收该链接等的更多信息。因此,我们可能能够为您提供更多帮助。完整链接如下:www.site.com/coups/email-address(www.site.com/coups?email=xxxx)。基本上,我正在为提供的电子邮件地址创建一些优惠券,但在电子邮件地址中使用+符号时,它会在DB中保留一个空格。如果有帮助,请使用PHP7.1。不幸的是,该链接是由第三方网站创建的,我对该网站没有任何控制权。感谢您的帮助,这确实是因为htaccess。必须添加B标志。我最后不得不使用explode,你知道用htaccess重写是否会导致这种情况吗?因为使用decode函数不起作用,所以它总是返回带有空格而不是加号的字符串。谢谢,我怀疑。但是,请向我们提供有关您的web服务器、PHP配置、您如何接收该链接等的更多信息。因此,我们可能能够为您提供更多帮助。完整链接如下:www.site.com/coups/email-address(www.site.com/coups?email=xxxx)。基本上,我是在制作一些优惠券