【问题标题】:How can I replace the "+" plus sign with its corresponding url encoding of "%2B"?如何将“+”加号替换为其对应的 url 编码“%2B”?
【发布时间】:2011-01-21 21:19:37
【问题描述】:

我在用 urlencoded 字符串“%2B”替换“+”号时遇到了一些问题。我该怎么做?

这是我尝试过的:

文本输入到文本框中:

plus(+)

然后我对字符串进行urlencode:

$string = urlencode($string);

字符串现在看起来像:

plus%28+%29

我想要“+” urlencoded,否则当我 urldecode() 显示在浏览器中的数据时,我最终会得到:

plus( ) 

因为 urldecode() 将“+”解释为空格。

我尝试使用 php 的 str_replace(),但我不断得到一个“NULL”作为“$new_string”的值返回:

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

有什么想法吗?

提前致谢!

【问题讨论】:

  • 为我使用 urlencode($string) echos plus%28%2B%29

标签: php string


【解决方案1】:

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

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

【讨论】:

  • ++ 来自 PHP 手册页 (php.net/manual/en/function.urlencode.php) 中的 cmets:“如果文本包含电子邮件地址,请不要使用 urlencode() 或 urldecode(),因为它会破坏“+ " 字符,一个完全有效的电子邮件地址字符。除非您确定不会对电子邮件地址进行编码并且您需要非标准“+”用法提供的可读性,否则请始终使用 use rawurlencode() 或 rawurldecode( ). "
【解决方案2】:

这对我有帮助:

function _rawurlencode($string) {
    $string = rawurlencode(str_replace('+','%2B',$string));
    return $string;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 2011-07-23
    • 2014-08-26
    • 2013-02-10
    • 1970-01-01
    相关资源
    最近更新 更多