删除重复的尾部斜杠

时间:2012-12-21 12:31:23

标签: php regex string url

如果像php这样的字符串包含重复的尾部斜杠,我想用$string检测。

例如:

$string = "http://somepage.com/something/some.html/////";

$string = "http://somepage.com/something/some.html";

我想做一个if,如果它有重复的话,比如:

If ($string = "http://somepage.com/something/some.html/////";) {
    remove extra trailing slashes
} 
//else do nothing... 

5 个答案:

答案 0 :(得分:9)

像这样申请rtrim

$string = rtrim($string, '/');

答案 1 :(得分:6)

您可以使用rtrim()

$string = rtrim($string, '/');

如果由于某种原因想要首先检查它是否有尾部斜杠,那么你可以检查最后一个字符,如下所示:

if ($string[ strlen($string)-1 ] === '/') {
    $string = rtrim($string, '/');
}

通过rtrim()抛出字符串并不昂贵,因此您不必首先检查尾部斜杠。

使用正则表达式修剪尾部斜杠有点过分了。

答案 2 :(得分:3)

$string = rtrim($string, '/');

答案 3 :(得分:3)

rtrim是最佳解决方案,但由于您标记了regex的完整性:

$string = "http://somepage.com/something/some.html/////";
echo preg_replace('#/+$#','',$string);

>>> http://somepage.com/something/some.html

#   - Is the delimiter character 
/+  - Matches one or more forward slash
$   - Matches the end of the string
#   - Delimiter 
Replace with 
''  - Nothing (empty string)

答案 4 :(得分:3)

有些地方/可以重复,例如,您可以通过所有这些链接访问您的问题:

这里唯一的双重/http://,所以让我们考虑一下。单独rtrim在我提供的大多数情况下都不起作用,所以让我们使用正则表达式。

解决方案

$parts = explode('//', $full_url, 2);
$parts[1] = rtrim(preg_replace('@/+@', '/', $parts[1]), '/');
$full_url = implode('//', $parts);
unset($parts);

实时测试:http://ideone.com/1qHR9o

Before: https://stackoverflow.com/questions/13990256/remove-duplicate-trailing-slashes/
After:  https://stackoverflow.com/questions/13990256/remove-duplicate-trailing-slashes
---------------------
Before: https://stackoverflow.com/questions/13990256/remove-duplicate-trailing-slashes////
After:  https://stackoverflow.com/questions/13990256/remove-duplicate-trailing-slashes
---------------------
Before: https://stackoverflow.com///questions///13990256///remove-duplicate-trailing-slashes////
After:  https://stackoverflow.com/questions/13990256/remove-duplicate-trailing-slashes
---------------------
Before: https://stackoverflow.com/questions//13990256/remove-duplicate-trailing-slashes//
After:  https://stackoverflow.com/questions/13990256/remove-duplicate-trailing-slashes
---------------------

说明

根据您的问题,我了解您始终会获得完整的网址,因此,我们可以将其分为两部分:

$parts = explode('//', $full_url, 2);

现在我们使用以下内容删除重复的/

preg_replace('@/+@', '/', $parts[1])

然后我们从字符串末尾删除额外的/

$parts[1] = rtrim( /*previous line*/ , '/');

然后将其破坏:

$full_url = implode('//', $parts);
unset($parts);