2010-08-14 109 views
0

我有一個小小的代碼片段,它抓住了文件名,包括擴展名。使用PHP獲取給定URL的文件名,並刪除文件擴展名

$currURL = substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1); 

給出一個網址... http://www.somewebsite.com/pretty/url/here/this-is-a-page.php返回this-is-a-page.php。我希望能夠簡單地返回,this-is-a-page

我很喜歡在儘可能少的代碼中做這樣的事情......你如何以簡單和優雅的方式做到這一點?

回答

4

試試這個:

$name = pathinfo($_SERVER['SCRIPT_NAME'], PATHINFO_FILENAME); 

測試:

$arr = array('http://www.example.com/path/to/page.php', 
      'http://www.example.com/path/to/page.php?a=b&c=d#e', 
      'http://www.example.com/path/to/page.x.php', 
      'www.example.com/path/to/page.php', 
      '/path/to/page.php'); 

foreach ($arr as $str) { 
    $name = pathinfo($str, PATHINFO_FILENAME); 
    echo $name . '<br />'; 
} 

輸出:

page 
page 
page.x 
page 
page 
+0

對不起,我不得不編輯刪除我給予好評。這會因'http://www.example.com/path/to/page.php?a = b&c = a.d'失敗,因爲它將字符串視爲文件系統文件,而不是URL。 – Artefacto 2010-08-15 01:05:20

+0

嗯,我很遺憾聽到這個消息,特別是因爲它回答了所述的問題。至少你在PHP的pathinfo()中發現了一個bug。 – GZipp 2010-08-15 02:36:27

2
$file_no_ext = preg_replace(
    array('#^.*/#', '#\.[^./]+$#'), '', parse_url($url, PHP_URL_PATH)); 

例如,

 
http://example.com/fds.php/path/file 
=> file 
http://example.com/fds.php/path/file.php 
=> file 
http://example.com/fds.php/path/file.php2.php?abc=a 
=> file.php2 

另一種解決方案是

$file_no_ext = pathinfo(parse_url($url, PHP_URL_PATH), PATHINFO_FILENAME); 
0
echo substr(strstr($url,'.php',TRUE),strrpos($url,'/')+1) 

preg_match('/[^\/]+(?=\.php)/',$url,$match); 
echo $match[0]; 
0

這適用於.php文件

rtrim(substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1),".php");