Php 从URL结尾删除正斜杠

Php 从URL结尾删除正斜杠,php,Php,下面的代码从输入数据库的网站开始处删除“www.”等。它工作得很好 是否有一种方法可以使用类似的代码从输入到同一数据库的网站尾部删除正斜杠 $remove_array = array('http://www.', 'http://', 'https://', 'https://www.', 'www.'); $site = str_replace($remove_array, "", $_POST['site']); 这使用了一种相对简单的方法。$表示只匹配字符串末尾的斜杠,因此它不会删除st

下面的代码从输入数据库的网站开始处删除“www.”等。它工作得很好

是否有一种方法可以使用类似的代码从输入到同一数据库的网站尾部删除正斜杠

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

这使用了一种相对简单的方法。
$
表示只匹配字符串末尾的斜杠,因此它不会删除
stackoverflow.com/questions/
中的第一个斜杠。大括号
{}
只是分隔符;PHP需要匹配字符和正则表达式的前后,这是出于愚蠢的原因。

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

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

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

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

这可能比公认的答案更酷;)

您可以将要从字符串中删除的字符串传递给函数族。此外,您还可以使用
rtrim
仅修剪字符串的末尾:

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

最优雅的解决方案是使用

编辑

我忘了rtrim()

你也可以到处玩。

这就是你想要的吗

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

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

也许更好的解决方案是使用.htaccess,但php也可以通过以下方式实现:

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

最简单的方法:

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

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

例如:

会是

会是

这方面的PHP代码是:

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

我认为匹配的字符必须是相同的,即{和{而不是{和}。此外,当您想提供标志时,字符是有用的。例如,/[a-z]*/I意味着以不区分大小写的方式匹配所有内容。(,{},[],和是例外。IMHO,标志应该是一个单独的参数。95%的时间我没有任何标志,分隔符只是噪音。啊,我明白了,谢谢你让我知道。我通常使用/作为传统,但在http://和结束标记中转义时可能会很痛苦(如果我认为可以使用正则表达式匹配xhtml)我认为他们使用了这样的标志,因为它在其他正则表达式实现中是相同的。但是你可能是对的,如果它被重新设计,也许最好使用它自己的参数。很酷。感谢你的回答。-1呃,这不应该是一个解决方案,也不是一个。你的代码返回$site原样(我甚至测试了它).Wow,这个问题有很多解决方案。谢谢!regexp是大炮,后面的斜杠是麻雀。尽管我要删除的不仅仅是后面的斜杠,例如空格、制表符和换行符:$site=rtrim($site,“/\t\n\r”);而且,rtrim删除所有后面的斜杠$site=“,而regexp只删除一个尾随斜杠。这应该是公认的答案。除非你真的必须使用regex,否则不要使用regex。将regex用于如此简单的任务太过分了。
rtrim()。
<?php
    header('location: '.preg_replace("/\/$/","",$_SERVER['REQUEST_URI']));
?>
$url = rtrim($url,'/');
if(stripos($url, '?')) {
    $url = preg_replace('{/\?}', '?', $url);
} else {
    $url = preg_replace('{/$}', '', $url);
}