使用PHP将%S中的SPACES替换为%20

Dav*_*vid 50 php regex url

我想用%20替换网址中的所有空格实例.我怎么用正则表达式做到这一点?

谢谢!

Pas*_*TIN 77

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

$new = str_replace(' ', '%20', $your_string);
Run Code Online (Sandbox Code Playgroud)


但是,如果你想要更多,而且你可能会这样做,如果你正在使用URL,你应该看看这个urlencode()功能.


Mad*_*iha 33

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

  • 他是,他问而不是谷歌搜索.) (26认同)
  • 这种方法的唯一问题是它还将所有斜杠和&符号转换为实体.我的问题只是空格.你的,懒惰的. (19认同)
  • 好吧,用"+"替换空格 - 只是不起作用. (5认同)
  • 显然不够懒:) (2认同)
  • 即使对于懒惰的人,这也不是该问题的最佳答案:rawurlencode() (2认同)

dro*_*nda 27

我认为你必须使用rawurlencode()代替urlencode().

样品

$image = 'some images.jpg';
$url   = 'http://example.com/'
Run Code Online (Sandbox Code Playgroud)

随着urlencode($ str)将导致

echo $url.urlencode($image); //http://example.com/some+images.jpg
Run Code Online (Sandbox Code Playgroud)

它根本不会改为%20

但是使用rawurlencode($ image)会产生

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

  • 对我来说,这些输出是这样的:`http%3A%2F%2Fexample.com%2Fsome%20images.jpg`,我的服务器有一些问题或者你的答案可能不准确?!谢谢. (2认同)

Vyk*_*tor 15

你有几个选择如何做到这一点,或者:

strtr()

假设您要替换"\t"" "使用"%20":

$replace_pairs = array(
  "\t" => '%20',
  " " => '%20',
);
return strtr( $text, $replace_pairs)
Run Code Online (Sandbox Code Playgroud)

preg_replace()

你在这里几乎没有选择,要么只是~ ~替换空间,要么替换空格和制表符~[ \t]~各种空格 ~\s~:

return preg_replace( '~\s~', '%20', $text);
Run Code Online (Sandbox Code Playgroud)

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

return preg_replace( '~\s+~', '%20', $text);
Run Code Online (Sandbox Code Playgroud)

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