从URL末尾删除字符

时间:2015-01-11 19:18:33

标签: php

假设我有一个这样的网址:
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/

我该怎么做?

4 个答案:

答案 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]."/";

?>