2015-01-11 281 views
0

說我有一個網址像這樣的東西:
http://website.com/website/webpage/?message=newexpense從URL的末尾刪除字符

我有下面的代碼,試圖問號之前拿到的網址:

$post_url = $actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; 
$link_before_question_mark = explode('?', $actual_link); 
$add_income_url = $link_before_question_mark[0]; 

在這個例子中,我會得到以下URL:
http://website.com/website/webpage/

我想刪除此網頁的部​​分所以網址是:
http://website.com/website/

我該怎麼做?

回答

1

您可以使用explode做類似的伎倆。然後將你不需要的部分和implode這個url彈回到一起。如果你確定'?'之後的部分從不包含'/',你可以用這個替換你的代碼。如果你不確定,你應該先刪除'/'後的部分,然後運行這段代碼刪除路徑的最後部分。

<?php 
$url = 'http://website.com/website/webpage/?message=newexpense'; 

$parts = explode('/', $url); 

// Remove the last part from the array 
$lastpart = array_pop($parts); 

// If the last part is empty, or the last part starts with a '?' 
// this means there was a '/' at the end of the url, so we 
// need to pop another part. 
if ($lastpart == '' or substr($lastpart, 0, 1) == '?') 
    array_pop($parts); 

$url = implode('/', $parts); 

var_dump($url); 
0

嘗試它與爆炸

<?php 
$actual_link = "http://website.com/website/webpage/?message=newexpense]"; 
$link_before_question_mark = explode('?', $actual_link); 
$add_income_url = $link_before_question_mark[0]; 
$split=explode('/', $add_income_url); 
echo $split[0]."//".$split[2]."/".$split[3]."/"; 

?> 

更妙的是...

<?php 
$actual_link = "http://website.com/website/webpage/?message=newexpense]"; 
$split=explode('/', $actual_link); 
echo $split[0]."//".$split[2]."/".$split[3]."/"; 

?> 
1

我可能會使用dirname;它是專門設計一個「/」之後剝離的最後的東西......

$url = "http://website.com/website/webpage/?message=newexpense"; 
echo dirname(dirname($url))."/"; // "http://website.com/website/" 

(因爲它在文檔中說,「目錄名()操作天真地對輸入字符串,不知道實際的文件系統...「,因此用於這種目的是相當安全的。)

2

使用parse_url這樣您就可以擁有所有組件。

$url = 'http://website.com/website/webpage/?message=newexpense'; 
$pUrl = parse_url($url); 
echo $pUrl['scheme'] . '://' . $pUrl['host'] . $pUrl['path']; 
+1

是的,parse_url是分離事物的好方法。請注意,在這種情況下,您仍然需要去掉「網頁」部分,以便從問題中獲取所需的URL。 –

+0

同意。這是你需要做什麼的問題。如果我有一個包含查詢的uri,那麼我希望它在腳本的某個位置被使用,以便一次性獲得所有可用的內容。但是,如果沒有其他用途,那麼dirname肯定可以很好地完成工作。 – CMF