2

问题

这是一个非常容易理解的问题。

我让用户提交一个 URL,例如“http://example.com/path/filename.html”。

我正在使用 PHP 的dirname()函数来获取这个 URL 的所谓“基础”。对于上面的示例,这将是“http://example.com/path”。

当用户输入以下内容时,我的问题出现了:

http://example.com/blog

如果您在浏览器中输入上述内容,您将在名为“blog”的文件夹中看到 index.php 或 .html 页面。但是,PHPdirname()将只返回“http://example.com”。

我不确定它是否认为“博客”是一个无扩展名的文件,如果存在的话,但我真的找不到解决方案。

我尝试过的事情

我首先尝试使用这种快速方法获取 URL 的扩展名:

$url = 'http://example.com/index.php';
$file_extension = end(explode('.', $filename));

然后,我会使用 PHP 检查扩展是否存在empty()。如果扩展名存在,则意味着在文件夹后输入了一个文件名,例如“http://example.com/path/file.html”,并且dirname()是完美的。如果扩展名不存在,则没有输入文件并且路径中的最后一项是文件夹,因此它已经是“基础”。

但是,在简单的“http://example.com/path/”的情况下,上面将返回“.com/path/”作为文件扩展名,我们都知道它不存在。在这种情况下,我会使用该dirname()函数并切断“/path/”。

编辑:

使用的扩展名basename($url)不起作用,因为如果用户输入“http://example.com”basename()返回“example.com”,其扩展名应该是“.com”

希望有人遇到过同样的问题并知道解决方案。我仍在寻找,但任何答案都非常感谢!

4

1 回答 1

1

编辑 好的,上次我放弃之前:

function getPath($url){
    $parts=explode("/",$url);
    $patharray=array(".","http:","https:");
    if(!in_array(pathinfo($url,PATHINFO_DIRNAME),$patharray) && strpos($parts[count($parts)-1], ".")!==false)
        unset($parts[count($parts)-1]);
    $url=implode("/",$parts);
    if(substr($url,-1)!='/')
        $url.="/";
    return $url;
}
echo getPath("http://www.google.com/blog/testing.php")."\n";
echo getPath("www.google.com/blog/testing.php")."\n";
echo getPath("http://www.google.com/blog/")."\n";
echo getPath("http://www.google.com/blog")."\n";
echo getPath("http://www.google.com")."\n";
echo getPath("http://www.google.com/")."\n";
echo getPath("www.google.com/")."\n";
echo getPath("www.google.com")."\n";

最后一部分带有“。”的任何网址。in 它被解析出来,否则它就会被单独留下。它用于pathinfo()检查它是否只是一个域(“google.com”或“http://www.google.com”),然后留下最后一部分,因为会有一个“。” 在里面。这是脚本输出:

http://www.google.com/blog/
www.google.com/blog/
http://www.google.com/blog/
http://www.google.com/blog/
http://www.google.com/
http://www.google.com/
www.google.com/
www.google.com/
于 2012-08-09T03:02:31.577 回答