PHP:如何在绝对URL中添加尾部斜杠

2022-08-30 22:53:31

我有一个绝对URL列表。我需要确保它们都有尾部斜杠(如果适用)。所以:

我想我需要使用正则表达式,但匹配URL是一种痛苦。希望有一个更简单的解决方案。想法?


答案 1

对于这个非常具体的问题,根本不使用正则表达式也可能是一种选择。如果您的列表很长(数千个URL)并且时间问题,则可以选择手动编写此非常简单的操作。

这将执行相同的操作:

$str .= (substr($str, -1) == '/' ? '' : '/');

当然,它不像正则表达式那样优雅或灵活,但它避免了解析正则表达式字符串的开销,并且它将像PHP一样快速运行。
可以说它不如正则表达式可读,尽管这取决于读者对正则表达式语法的舒适度(有些人可能会发现它更具可读性)。

它当然不会检查字符串是否真的是一个格式良好的URL(例如zerkms的正则表达式),但是您已经知道您的字符串无论如何都是URL,所以这有点多余。

但是,如果您的列表是10或20个URL,请忘记这篇文章。使用正则表达式,差值将为零。


答案 2

您可以使用parse_url()来执行此操作,而不是使用正则表达式来执行此操作。例如:

$url = parse_url("http://www.example.com/ab/abc.html?a=b#xyz");
if(!isset($url['path'])) $url['path'] = '/';
$surl = $url['scheme']."://".$url['host'].$url['path'].'?'.$url['query'].'#'.$url['fragment'];
echo $surl;

推荐