从URL的尾端删除正斜杠

时间:2009-06-23 04:42:58

标签: php

以下代码从输入数据库的网站的开头删除“www。”等。它很棒。

有没有办法可以使用类似的代码从输入到同一数据库的网站的尾端删除正斜杠?

$remove_array = array('http://www.', 'http://', 'https://', 'https://www.', 'www.');
$site = str_replace($remove_array, "", $_POST['site']);

9 个答案:

答案 0 :(得分:41)

您可以将要剪切掉字符串的字符串传递给trim函数族。此外,您可以使用rtrim来修剪字符串的结尾:

$site = rtrim($site, "/");

答案 1 :(得分:21)

$site = preg_replace('{/$}', '', $site);

这使用了相对简单的regular expression$表示只匹配字符串末尾的斜杠,因此不会删除stackoverflow.com/questions/中的第一个斜杠。花括号{}只是分隔符; PHP需要匹配字符以及正则表达式的正面和背面,这有些愚蠢的原因。

答案 2 :(得分:5)

最简单的方法:

$url = rtrim($url,'/');

答案 3 :(得分:3)

约翰是第一个,我认为他的解决方案应该是首选,因为它更优雅,但这是另一个:

$site = implode("/", array_filter(explode("/", $site)));

<强>更新

THX。我更新了它,现在甚至处理这样的事情

$site = "///test///test//"; /* to => test/test */

这可能使它比接受的答案更酷;)

答案 4 :(得分:2)

这就是你想要的吗?

$url = 'http://www.example.com/';

if (substr($url, -1) == '/')
    $url = substr($url, 0, -1);

答案 5 :(得分:1)

您可以在问号前加一个斜杠,并且可以有“?”在参数(.com /?price = 1)中使用符号或“ /”,因此您不应该每次都删除它。您只需要删除问号“?”之前的第一个斜杠“ /”。或删除最后一个斜杠“ /”(如果您没有问号“?”)完全没有。

例如:

https://money.yandex.ru/to/410011131033942/?&question=where?&word=why?&back_url=https://money.yandex.ru/to/410011131033942/&price=1

将会

https://money.yandex.ru/to/410011131033942?&question=where?&word=why?&back_url=https://money.yandex.ru/to/410011131033942/&price=1

https://money.yandex.ru/to/410011131033942/

将会

https://money.yandex.ru/to/410011131033942

用于此目的的PHP代码为:

if(stripos($url, '?')) {
    $url = preg_replace('{/\?}', '?', $url);
} else {
    $url = preg_replace('{/$}', '', $url);
}

答案 6 :(得分:0)

最优雅的解决方案是使用rtrim()

$url = 'http://www.domain.com/';

$urlWithoutTrailingSlash = rtrim($url, '/');

修改

我忘记了rtrim();

你也可以玩parse_url()

答案 7 :(得分:-1)

$new_string = preg_replace('|/$|', '', $string);

答案 8 :(得分:-2)

也许更好的解决方案是使用.htaccess,但php也可以这样做:

<?php
    header('location: '.preg_replace("/\/$/","",$_SERVER['REQUEST_URI']));
?>