2015-01-11 230 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