使用 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的主要内容,如果未能解决你的问题,请参考以下文章
xml 简单的配置文件更改,以确保Sitecore Urls的格式很好,用连字符( - )替换空格(%20)。请注意,这也包括
替换空格:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。