Вы можете использовать функцию parse_url , вот пример:
$uri = parse_url( $_SERVER['REQUEST_URI']);
$protocol = !empty($_SERVER['HTTPS']) ? 'https://' : 'http://';
$url = $protocol . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME'] . '?' . ( isset( $uri['query']) ? $uri['query'] : '');
Я не видел в вашем коде, где вы получаете имя файла скрипта, поэтому я использовал $_SERVER['SCRIPT_NAME']
.
Редактировать: Моя ошибка, я не видел, что вам нужно манипулировать / удалить последний параметр $_GET
.Вот пример того, как это сделать, используя метод, аналогичный описанному выше, в сочетании с parse_str .Обратите внимание, что этот метод будет работать независимо от расположения параметра lang
, он не обязательно должен быть последним в строке запроса.
$protocol = !empty($_SERVER['HTTPS']) ? 'https://' : 'http://';
$params = array();
if( isset( $_SERVER['QUERY_STRING']) && !empty( $_SERVER['QUERY_STRING']))
{
parse_str( $_SERVER['QUERY_STRING'], $params);
$params['lang'] = 'anything';
// unset( $params['lang']); // This will clear it from the parameters
}
// Now rebuild the new URL
$url = $protocol . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME'] . ( !empty( $params) ? ( '?' . http_build_query( $params)) : '');
Спасибо @Yzmir Ramirez за улучшениевторая версия, которая устраняет посторонний вызов parse_url
.