3

我想检测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... 
4

5 回答 5

9

rtrim像这样申请

$string = rtrim($string, '/');
于 2012-12-21T12:33:40.433 回答
6

您可以使用rtrim()

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

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

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

将字符串穿过rtrim()并不昂贵,因此您实际上不必首先检查尾部斜杠。

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

于 2012-12-21T12:40:06.157 回答
3
$string = rtrim($string, '/');
于 2012-12-21T12:34:08.330 回答
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)
于 2012-12-21T12:34:53.293 回答
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
---------------------

解释

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

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

现在我们删除重复/的:

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

/然后我们从字符串末尾删除多余的部分:

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

并将其内爆:

$full_url = implode('//', $parts);
unset($parts);
于 2012-12-21T12:47:56.530 回答