从路径中删除不必要的斜杠

Ala*_*mal 5 php

$path = '/home/to//my///site';
Run Code Online (Sandbox Code Playgroud)

我试图/从上面的路径中删除不必要的正斜杠

我想要得到这个结果

/home/to/my/site
Run Code Online (Sandbox Code Playgroud)

我失败了str_replace,因为我不知道斜线的数量.

dyn*_*mic 27

优雅的解决方

有了preg_replace你可以用一个单一的代码行获得此:

preg_replace('#/+#','/',$str);
Run Code Online (Sandbox Code Playgroud)

该模式/+将匹配前进/一次或多次,并将替换为单个/.

不那么优雅的解决方案

当然还有其他方法可以实现这一点,例如使用while循环.

while( strpos($path, '//') !== false ) {
   $path = str_replace('//','/',$path);
}
Run Code Online (Sandbox Code Playgroud)

这将调用,str_replace直到所有出现的//更换.如果您想牺牲可读性(不建议),您也可以在一行代码中编写该循环.

while( strpos( ($path=str_replace('//','/',$path)), '//' ) !== false );
Run Code Online (Sandbox Code Playgroud)


Ale*_*nov 9

如果有人想从URL中删除额外的斜杠而不删除http/https之后的前两个斜杠:

$url = preg_replace('/([^:])(\/{2,})/', '$1/', $url); 
Run Code Online (Sandbox Code Playgroud)

(感谢ツLiverbool 如何使用'PREG'或'HTACCESS'删除URI中的多个斜杠)