Удалить символы из конца URL

0

Скажем, у меня есть 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/

Как я могу это сделать?

Теги:

4 ответа

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);
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, безусловно, справится со своей задачей.
1

Я бы, вероятно, использовал dirname; он специально предназначен для удаления последнего материала после "/"...

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

(Как сказано в документации, "dirname() наивно работает на входной строке и не знает о фактической файловой системе...", поэтому вполне безопасно использовать для этой цели.)

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

?>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню