Php 删除重复的尾部斜杠
我想用Php 删除重复的尾部斜杠,php,regex,string,url,Php,Regex,String,Url,我想用php检测像$string这样的字符串是否包含重复的尾部斜杠 例如: $string = "http://somepage.com/something/some.html/////"; 到 我想做一个,如果它有重复项,比如: If ($string = "http://somepage.com/something/some.html/////";) { remove extra trailing slashes } //else do nothing... 像这样申请 rt
php
检测像$string
这样的字符串是否包含重复的尾部斜杠
例如:
$string = "http://somepage.com/something/some.html/////";
到
我想做一个,如果它有重复项,比如:
If ($string = "http://somepage.com/something/some.html/////";) {
remove extra trailing slashes
}
//else do nothing...
像这样申请
rtrim
是最好的解决方案,但由于您为完整性标记了regex
:
$string = "http://somepage.com/something/some.html/////";
echo preg_replace('#/+$#','',$string);
>>> http://somepage.com/something/some.html
您只需使用rtrim()
:
如果出于某种原因希望首先检查它是否有尾部斜杠,则可以检查最后一个字符,如下所示:
if ($string[ strlen($string)-1 ] === '/') {
$string = rtrim($string, '/');
}
通过rtrim()
抛出字符串并不昂贵,因此您实际上不必首先检查后面的斜杠
使用正则表达式修剪尾部斜杠有点过分。有些地方可以复制/
,例如,您可以通过以下所有链接访问您的问题:
唯一的双<代码> /<代码>这里的差异是<代码> http://< /COD>,所以让我们考虑一下。代码>rtrim
单独在我提供的大多数情况下都不起作用,所以让我们使用正则表达式
解决方案
现场测试:
解释
从您的问题中,我了解到您总是可以获得完整的URL,因此,我们可以将其分为两部分:
$parts = explode('//', $full_url, 2);
现在,我们使用以下方法删除重复的/
:
preg_replace('@/+@', '/', $parts[1])
然后我们从字符串末尾删除额外的/
:
$parts[1] = rtrim( /*previous line*/ , '/');
然后将其内爆回来:
$full_url = implode('//', $parts);
unset($parts);
别忘了这对你有帮助我不知道,我投票给你来补偿:)不过爆炸部分有点棘手。我更喜欢exclude regex,它只排除
https?://
部分。因为,如果url中没有定义协议怎么办?那么它就会失败。@Jelmer实际上,如果没有定义协议,那么您没有URL,您有一个URL,数据将无效,但是通过检查数组的大小是否为2,可以很容易地测试它,虽然我在接收时测试参数是否有效。OP想要的只是删除字符串中的前斜杠,而rtrim
是完美的解决方案,但您回答的问题是验证URL
@sudo\O中的前斜杠。好的,我不知道后面的意思是“在右边”,我总是把它理解为多重的或顺序的。这是一个语言障碍。@JoséRobertoAraújoJúnior ah好的是尾随表示在结尾处找到如果($string[strlen($string)-1]===='/'){$string=rtrim($string,'/');}。。$string[strlen($string)-1]是什么意思。。。为什么$string是数组。。。我不明白,但对我来说这似乎是最好的解决办法。我有两种类型的URL。。。例如:和。。。我只想去掉ebery多余的斜线。。。在.html上这很容易,但是当我写的时候会发生什么呢:?您可以使用[]
访问字符串中的字符rtrim($string,“/”)
删除右侧的所有前斜杠。在询问更多问题之前,请参阅。
if ($string[ strlen($string)-1 ] === '/') {
$string = rtrim($string, '/');
}
$parts = explode('//', $full_url, 2);
$parts[1] = rtrim(preg_replace('@/+@', '/', $parts[1]), '/');
$full_url = implode('//', $parts);
unset($parts);
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
---------------------
$parts = explode('//', $full_url, 2);
preg_replace('@/+@', '/', $parts[1])
$parts[1] = rtrim( /*previous line*/ , '/');
$full_url = implode('//', $parts);
unset($parts);