这是一个非常容易理解的问题。
我有一位用户提交了一个网址,例如“http://example.com/path/filename.html”。
我正在使用PHP的dirname()
函数来获取此URL的所谓“基础”。对于上面的示例,这将是“http://example.com/path”。
当用户输入此内容时,我的问题出现了:
http://example.com/blog
如果您在浏览器中输入上述内容,您将在名为“blog”的文件夹中看到index.php或.html页面。但是,PHP的dirname()
将仅返回“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”
答案 0 :(得分: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";
最后一部分有“。”的任何网址。在它解析出来,否则它是独立的。它使用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/