使用 PHP 将 URLS 中的空格替换为 %20

Posted

技术标签:

【中文标题】使用 PHP 将 URLS 中的空格替换为 %20【英文标题】:Using PHP Replace SPACES in URLS with %20 【发布时间】:2012-03-03 16:14:03 【问题描述】:

我希望用 %20 替换 url 中的所有空格实例。我将如何使用正则表达式来做到这一点?

谢谢!

【问题讨论】:

是否有任何具体原因必须使用正则表达式?如果它是一个 URL,你可以使用 php 的 urldecode 方法.. 你应该更好地描述你的问题。请参阅parse_url 以仅在您想要的部分上应用函数或(如果可能)从头开始构建有效的 URL。 【参考方案1】:

使用urlencode() 而不是尝试实现自己的。偷懒。

【讨论】:

他是,他问而不是谷歌搜索。) 显然不够懒惰:) 这种方法的唯一问题是它把所有的斜线和 & 符号也变成了实体。我的问题只是空格。你的,懒惰的。 即使对于懒惰的人来说,这也不是问题的最佳答案:rawurlencode() 好吧,它用+ 替换了一个空格——只是不起作用。【参考方案2】:

这里不需要正则表达式,如果您只想用另一个字符串替换一段字符串:使用str_replace() 应该绰绰有余:

$new = str_replace(' ', '%20', $your_string);

但是,如果您想要更多,而且您可能会这样做,如果您正在使用 URL,您应该看看 urlencode() 函数。

【讨论】:

如何使用路由在 codeignitor 中用 / 替换 #。 我认为这个解决方案:***.com/a/9240567/4027811(实际上在下面)更好,因为更改 url 的所有关键符号,而不仅仅是空格。 为什么这会替换 url 中的 ":" 和 "/"?我在尝试对 URL 进行编码以通过 filter_var($url, FILTER_VALIDATE_URL) 进行验证时遇到问题,因为它仅验证 URL 是否以“http”开头。【参考方案3】:

您有多种选择:

urlencode()rawurlencode() - 用于为 http 协议编码 URL 的函数 str_replace() - “重型机械”字符串替换 strtr() - 替换多个字符时性能比 str_replace() 更好 preg_replace() 使用正则表达式(perl 兼容)

strtr()

假设您要将"\t"" " 替换为"%20"

$replace_pairs = array(
  "\t" => '%20',
  " " => '%20',
);
return strtr( $text, $replace_pairs)

preg_replace()

您在这里几乎没有选择,要么只替换空格~ ~,再次替换空格和制表符~[ \t]~ 或全部kinds of spaces ~\s~

return preg_replace( '~\s~', '%20', $text);

或者当您需要用一个%20 替换像这样的"\t \t \t \t" 字符串时:

return preg_replace( '~\s+~', '%20', $text);

我假设您确实想使用手动字符串替换并处理更多类型的空格,例如不可破坏的空格 ( )

【讨论】:

【参考方案4】:
$result = preg_replace('/ /', '%20', 'your string here');

你也可以考虑使用

$result = urlencode($yourstring)

也可以转义其他特殊字符

【讨论】:

【参考方案5】:

我认为你必须使用 rawurlencode() 而不是 urlencode() 来达到你的目的。

样本

$image = 'some images.jpg';
$url   = 'http://example.com/'

使用 urlencode($str) 会得到结果

echo $url.urlencode($image); //http://example.com/some+images.jpg

它根本不会更改为 %20

但使用 rawurlencode($image) 会产生

echo $url.rawurlencode(basename($image)); //http://example.com/some%20images.jpg

【讨论】:

这通常是这个问题的最佳答案。谢谢! 对我来说,这些输出是这样的:http%3A%2F%2Fexample.com%2Fsome%20images.jpg,我的服务器有一些问题或者你的答案可能不准确?!谢谢。 比接受的最佳答案。节省了我的时间和大量代码。 我有同样的问题广告@adrianTNT,我真的不明白!【参考方案6】:
    public static function normalizeUrl(string $url) 
        $parts = parse_url($url);
        return $parts['scheme'] .
            '://' .
            $parts['host'] .
            implode('/', array_map('rawurlencode', explode('/', $parts['path'])));

    

【讨论】:

以上是关于使用 PHP 将 URLS 中的空格替换为 %20的主要内容,如果未能解决你的问题,请参考以下文章

《剑指Offer》替换空格(将字符串中的空格替换为%20)

xml 简单的配置文件更改,以确保Sitecore Urls的格式很好,用连字符( - )替换空格(%20)。请注意,这也包括

为啥 PHP 将 $_COOKIE 中的加号替换为空格?

替换空格:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

替换空格

替换空格为%20