假设我有一个这样的网址:
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];
在这个例子中,我会得到以下网址:
http://website.com/website/webpage/
我想删除此网页部分,以便网址为:
http://website.com/website/
我该怎么做?
答案 0 :(得分:2)
使用parse_url这样就可以获得所有组件。
$url = 'http://website.com/website/webpage/?message=newexpense';
$pUrl = parse_url( $url);
echo $pUrl['scheme'] . '://' . $pUrl['host'] . $pUrl['path'];
答案 1 :(得分:1)
您可以使用explode
执行类似的操作。然后弹出您不需要的部分并将implode
网址重新组合在一起。如果您确定该部分在'?'之后?从不包含' /',您可以使用此代码替换您的代码。如果您不确定,应先删除' /'之后的部分。然后运行此代码以删除路径的最后部分。
<?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);
答案 2 :(得分:1)
我可能会使用dirname
;它专门用于在&#34; /&#34; ...
$url = "http://website.com/website/webpage/?message=newexpense";
echo dirname(dirname($url))."/"; // "http://website.com/website/"
(正如文档中所述,&#34; dirname()在输入字符串上天真地操作,并且不知道实际的文件系统......&#34;,所以它非常安全用于此类目的。)
答案 3 :(得分: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]."/";
?>