2015-06-16 35 views
1

我是PHP新手,希望有人能幫助我解決這個問題。PHP:如何從URL中刪除所有類型的擴展(包含句點)

我想讓PHP給我我的網站當前頁面的名稱。 重要的是,我需要這個沒有任何引導斜線和沒有任何尾隨擴展等,只是簡單的頁面名稱。

例子:
一個網頁的網址是http://www.myurl.com/index.php?lang=en 在這種情況下,它應該只返回「指數」。

我找到了一種方法來使用以下,但無法正常刪除後的部分,因爲這是可變擺脫前沿部分(也可以只是.php.php?lang=en.php=lang=de等)。

$pageName = basename($_SERVER["REQUEST_URI"]); 

我發現的唯一的事情就是以下,但並不能掩蓋變量擴展部分:

$pageName = basename($_SERVER["REQUEST_URI"], ".php"); 

有人能告訴我如何擺脫後沿部分呢?

提前許多感謝, 麥克

+0

如果我沒有記錯,它是在htaccess配置中的某個地方。 – Mox

+0

謝謝 - 我不認爲這是正確的方法。我只需要這個在頁面中的變量而不是實際的URL本身。 – keewee279

回答

6

您可以結合使用parse_urlpathinfo

<?php 
$input = 'http://www.myurl.com/index.php?lang=en'; 
$output = pathinfo(parse_url($input, PHP_URL_PATH), PATHINFO_FILENAME); 

var_dump($output); // => index 

演示:https://eval.in/382330

+0

這是完美的 - 非常感謝您的幫助! – keewee279

0

A tutorial on how to do it

使用.htaccess文件就可以了:

將用戶重定向到不同的頁面

密碼保護的特定目錄

個阻止用戶通過IP防止您的圖片熱

重寫的URI

指定自己的錯誤文件

+0

謝謝 - 我不認爲這是正確的方法。我只需要這個頁面內的變量而不是實際的URL本身。 – keewee279

+0

我想你需要改寫你的問題。因爲你的問題是要求刪除擴展。 – Mox

2

一種可能方式是:

$url = "http://www.myurl.com/index.php?lang=en"; 

preg_match('/\/([\w-_]+)\.php/i',$url,$match); 
echo $match[1]; 

如果您需要這裏的正則表達式的幫助: https://regex101.com/r/cM8sS3/1

+0

感謝您的支持! – keewee279

2

這裏是最簡單的解決方案。

$pagename = basename($_SERVER['PHP_SELF']); 
 
$a = explode(".",$pagename); 
 
echo $a[0];

+1

如果'$ pagename'的時間長度超出了擴展名,這會產生問題,例如: 'foo.bar.php'。 – Grokify

+0

謝謝 - 這也很棒,但我需要覆蓋其他時期(如Grokify提到的)。 – keewee279

+0

用戶以下代碼 $ pagename = basename($ _ SERVER ['PHP_SELF']); $ part = implode('。',explode('。',$ pagename,-1)); – kevin

0

試試這個

//return url 
$pageName = base64_decode($_GET["return_url"]); 

function Url($pageName) { 
    $pageName= strtolower($pageName); 
    $pageName= str_replace('.',' ',$pageName); 
    $pageName= preg_replace("/[^a-z0-9_\s-]/", "", $pageName); 
    $pageName= preg_replace("/[\s-]+/", " ", $pageName); 
    $pageName= preg_replace("/[\s_]/", "-", $pageName); 
    return $pageName ; 
} 
$cleanurl=Url($pageName); 
echo $cleanurl; 
0

這是一種我只是使用正則表達式的情況。下面的代碼:

$pagename = basename("http://www.myurl.com/index.php?lang=en"); 

$pagename = preg_replace("/\..*/", "", $pagename); 

這裏你可以看到一個工作演示:https://ideone.com/RdrHzc

第一個參數是一個文字句點後跟任意數目的字符相匹配的表達。第二個參數告訴函數用一個空字符串替換匹配的字符串,最後一個參數是要操作的變量。