从 URL 末尾删除字符


Remove characters from end of URL

假设我有一个包含以下内容的URL:
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/

我想删除其中的网页部分,因此 URL 是:
http://website.com/website/

我该怎么做?

使用 parse_url 这样你就有了所有组件。

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

您可以使用 explode 执行类似的技巧。然后弹出您不需要的部分,并将 url 重新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);

我可能会使用dirname; 它是专门为剥离"/"之后的最后内容而设计的...

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

正如文档中所说,"dirname() 在输入字符串上天真地运行,并且不知道实际的文件系统......",因此用于这种目的非常安全。

试试爆炸

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