Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 删除重复的尾部斜杠_Php_Regex_String_Url - Fatal编程技术网

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);