PHP - 将多个斜杠减少为单斜杠

yod*_*oda 1 php regex preg-replace

我有一个正则表达式,我用它来减少多个斜杠到单斜杠.目的是读取以前使用apache中的mod_rewrite转换为人类可读链接的URL,如下所示:

http://www.website.com/about/me
Run Code Online (Sandbox Code Playgroud)

这有效:

$uri = 'about//me';
$uri = preg_replace('#//+#', '/', $uri);
echo $uri; // echoes 'about/me'
Run Code Online (Sandbox Code Playgroud)

这不起作用:

$uri = '/about//me';
$uri = preg_replace('#//+#', '/', $uri);
echo $uri; // echoes '/about/me'
Run Code Online (Sandbox Code Playgroud)

我需要能够单独使用每个url参数,但在第二个示例中,如果我爆炸了trailling斜杠,它将返回3个段而不是2个段.如果参数是空的,我可以在PHP中验证是否有,但是因为我正在使用那个正则表达式,如果正则表达式已经为我处理,那将是很好的,所以我不需要担心段验证.

有什么想法吗?

Not*_*ist 7

在这种情况下,str_replace可能更快

$uri = str_replace("//","/",$uri)
Run Code Online (Sandbox Code Playgroud)

其次:使用trim:http://hu.php.net/manual/en/function.trim.php

$uri = trim($uri,"/");
Run Code Online (Sandbox Code Playgroud)


gan*_*nji 5

这会将字符串中的双斜杠转换为单斜杠,但此代码的优点http://是保留了字符串 ( )协议部分中的斜杠。

preg_replace("#(^|[^:])//+#", "\\1/", $str);
Run Code Online (Sandbox Code Playgroud)