2011-01-21 3574 views
15

我在使用urlencoded字符串“%2B”替换“+”号时遇到了一些麻烦。我怎样才能做到这一点?如何将“+”加号替换为相应的网址编码“%2B”?

这是我已经试过:

输入的文本到文本框中:

plus(+) 

我再进行urlencode串:

$string = urlencode($string); 

字符串现在看起来像:

plus%28+%29 

我想有“+” url编码的,否则当我urldecode()中的数据在浏览器中显示我结束了:

plus() 

因为urldecode()解释“+”是一个空间。

我试图使用PHP的str_replace()函数,但我不断收到一个 “NULL” 返回为 “$ new_string” 值:

$new_string = str_replace('+', '%2B', $string); 

任何想法?

在此先感谢!

+1

对我来说,使用`urlencode($ string)`回声`加%28%2B%29`。 – 2011-01-21 21:24:13

回答

33

这很奇怪。当我在plus(+)上使用urlencode时,我得到plus%28%2B%29。确保你正确地使用它。

您也可以尝试rawurlencode。它会将空格编码为%20而不是+

+10

++从PHP手册页中的注释(http://php.net/manual/en/function.urlencode.php):“如果文本包含电子邮件地址,请勿使用urlencode()或urldecode() ,因为它破坏了“+”字符,这是一个完全有效的电子邮件地址字符除非你确定你不会编码电子邮件地址,并且你需要非标准的“+”用法提供的可读性,而是总是使用使用rawurlencode()或rawurldecode()。“ – John 2011-01-21 21:33:15