我希望用%20替换网址中的所有空格实例。我怎么用正则表达式做到这一点?
谢谢!
答案 0 :(得分:74)
这里不需要正则表达式,如果你只想用另一个字符串替换一段字符串:使用str_replace()
应该绰绰有余:
$new = str_replace(' ', '%20', $your_string);
但是,如果您想要更多,而且您可能会这样做,如果您正在处理URL,则应该查看urlencode()
函数。
答案 1 :(得分:32)
使用urlencode()
而不是尝试实现自己的。懒惰。
答案 2 :(得分:24)
我认为你必须使用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
答案 3 :(得分:14)
你有多种方法可以做到这一点:
urlencode()
或rawurlencode()
- 用于编码http协议的URL的函数str_replace()
- “重型机械”字符串替换strtr()
- 在替换多个字符时,其性能优于str_replace()
preg_replace()
使用正则表达式(perl compatible)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);
或者当您需要使用"\t \t \t \t"
替换%20
之类的字符串时:
return preg_replace( '~\s+~', '%20', $text);
我假设你真的想要使用手动字符串替换并处理更多类型的空格,例如不可破坏空间(
)
答案 4 :(得分:0)
$result = preg_replace('/ /', '%20', 'your string here');
你也可以考虑使用
$result = urlencode($yourstring)
也可以逃避其他特殊字符
答案 5 :(得分:0)
public static function normalizeUrl(string $url) {
$parts = parse_url($url);
return $parts['scheme'] .
'://' .
$parts['host'] .
implode('/', array_map('rawurlencode', explode('/', $parts['path'])));
}