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

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

谢谢!

【问题讨论】:

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

标签: php regex url


【解决方案1】:

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

【讨论】:

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

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

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


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

【讨论】:

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

您有多种选择:

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'])));
      
          }
      

      【讨论】:

        猜你喜欢
        • 2013-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-22
        • 1970-01-01
        相关资源
        最近更新 更多