有些地方可以重复使用/
,例如,你可以通过以下所有链接访问你的问题:
这里唯一起作用的双/
是http://
,所以我们要考虑它。在我提供的大多数情况下,仅使用rtrim
将无法正常工作,因此让我们使用正则表达式。
解决方法
$parts = explode('//', $full_url, 2);
$parts[1] = rtrim(preg_replace('@/+@', '/', $parts[1]), '/');
$full_url = implode('//', $parts);
unset($parts);
Live test: http://ideone.com/1qHR9o
Before: https://dev59.com/KmzXa4cB1Zd3GeqPS2GQ
After: https://dev59.com/KmzXa4cB1Zd3GeqPS2GQ
---------------------
Before: https://dev59.com/KmzXa4cB1Zd3GeqPS2GQ///
After: https://dev59.com/KmzXa4cB1Zd3GeqPS2GQ
---------------------
Before: https://stackoverflow.com///questions///13990256///remove-duplicate-trailing-slashes////
After: https://dev59.com/KmzXa4cB1Zd3GeqPS2GQ
---------------------
Before: https://stackoverflow.com/questions//13990256/remove-duplicate-trailing-slashes//
After: https://dev59.com/KmzXa4cB1Zd3GeqPS2GQ
---------------------
解释
从你的问题中我理解到你总是得到一个完整的URL,因此我们可以将其分为两个部分:
$parts = explode('//', $full_url, 2)
现在我们使用以下代码删除重复的
/
:
preg_replace('@/+@', '/', $parts[1])
然后我们从字符串末尾移除多余的
/
:
$parts[1] = rtrim( , '/');
然后将其合并回去:
$full_url = implode('//', $parts);
unset($parts);
[]
访问字符串中的字符。rtrim($string, '/')
可以移除右侧所有斜杠。在提出更多问题之前,请查看文档。 - Sverri M. Olsen