这似乎是一个容易解决的问题,但它并不像看起来那么容易。我在PHP中有这个字符串:
////%postname%/
这是一个URL,我从不想要连续多个斜杠。我永远不想完全删除斜杠。
这应该是这样的:
/%postname%/
因为结构可能看起来不同,我想需要一个聪明的preg替换正则表达式。它需要像这样使用URL:
////%postname%//mytest/test///testing
应转换为:
/%postname%/mytest/test/testing
答案 0 :(得分:18)
你走了:
$str = preg_replace('~/+~', '/', $str);
或者:
$str = preg_replace('~//+~', '/', $str);
甚至:
$str = preg_replace('~/{2,}~', '/', $str);
一个简单的str_replace()
也可以解决这个问题(如果不超过两个连续斜杠):
$str = str_replace('//', '/', $str);
答案 1 :(得分:4)
尝试:
echo preg_replace('#/{2,}#', '/', '////%postname%//mytest/test///testing');
答案 2 :(得分:4)
function drop_multiple_slashes($str)
{
if(strpos($str,'//')!==false)
{
return drop_multiple_slashes(str_replace('//','/',$str));
}
return $str;
}
使用str_replace
答案 3 :(得分:3)
迟到但所有这些方法都会删除http://
斜杠,但是这个。
function to_single_slashes($input) {
return preg_replace('~(^|[^:])//+~', '\\1/', $input);
}
# out: http://localhost/lorem-ipsum/123/456/
print to_single_slashes('http:///////localhost////lorem-ipsum/123/////456/');
答案 4 :(得分:0)
我的解决方案:
while (strlen($uri) > 1 && $uri[0] === '/' && $uri[1] === '/') {
$uri = substr($uri, 1);
}
答案 5 :(得分:-1)
echo str_replace('//', '/', $str);