如何从字符串中删除域名后的路径

时间:2015-07-21 12:39:43

标签: php path

我有以下代码:

function removeFilename($url)
{
    $file_info = pathinfo($url);
    return isset($file_info['extension'])
        ? str_replace($file_info['filename'] . "." . $file_info['extension'], "", $url)
        : $url;
}

$url1 = "http://website.com/folder/filename.php";
$url2 = "http://website.com/folder/";
$url3 = "http://website.com/";
echo removeFilename($url1); //outputs http://website.com/folder/
echo removeFilename($url2);//outputs http://website.com/folder/
echo removeFilename($url3);//outputs http:///

现在我的问题是,当只有一个没有文件夹或文件名的域时,我的功能也会删除website.com。

我的想法是,有任何方法让PHP告诉我的功能只有在你认为有用的第三个斜杠或任何其他解决方案之后才能完成工作。

5 个答案:

答案 0 :(得分:2)

更新:(工作和测试)

<?php
function removeFilename($url)
{
        $parse_file = parse_url($url);
        $file_info = pathinfo($parse_file['path']);
        return isset($file_info['extension'])
            ?  str_replace($file_info['filename'] . "." . $file_info['extension'], "", $url)
            :  $url;        
}

$url1 = "http://website.com/folder/filename.com";
$url2 = "http://website.org/folder/";
$url3 = "http://website.com/";

echo removeFilename($url1); echo '<br/>';
echo removeFilename($url2); echo '<br/>';
echo removeFilename($url3);
?>

<强>输出:

http://website.com/folder/
http://website.org/folder/
http://website.com/

答案 1 :(得分:0)

听起来你想要替换子串而不是整个东西。此功能可能对您有所帮助:

http://php.net/manual/en/function.substr-replace.php

答案 2 :(得分:0)

pathinfo无法识别域名和文件名。但如果没有文件名url以斜杠结束

$a = array(
"http://website.com/folder/filename.php",
"http://website.com/folder/",
"http://website.com",
);

foreach ($a as $item) {
   $item = explode('/', $item);
   if (count($item) > 3)
      $item[count($item)-1] ='';;
   echo implode('/', $item) . "\n";

}
  result

http://website.com/folder/
http://website.com/folder/
http://website.com

答案 3 :(得分:0)

由于文件名是最后一个斜杠,您可以使用substrstr_replace从路径中删除文件名。

$PATH = "http://website.com/folder/filename.php";

$file = substr( strrchr( $PATH, "/" ), 1) ; 
echo $dir = str_replace( $file, '', $PATH ) ;

<强>输出

  

http://website.com/folder/

答案 4 :(得分:0)

接近splash58的答案

function getPath($url) {
    $item = explode('/', $url);
    if (count($item) > 3) {
        if (strpos($item[count($item) - 1], ".") === false) {
            return $url;
        }
        $item[count($item)-1] ='';
        return implode('/', $item);
    }
    return $url;
}