PHP 在“?”之后替换删除字符串

PHP replace delete string after '?'

我有一个登录功能,您可以在 pageA 上的表单中提交数据,该数据将发送到 pageB,然后将您重定向回 pageA,并将错误消息作为 GET。

<?php 
// page B header code
  if(upload_fail) {
    header('Location: ' . $_SERVER['HTTP_REFERER'] . '?err=error_message');
  }
?>

如果您登录失败一次,这会正常工作,但第二次失败时,它会再次附加 '?err=error_message',这会导致 url 为:test。domain/pageA?err=error_message?err=error_message.

所以我的问题是我如何 trim HTTP_REFERER 以便清除它包含的任何先前 GET,然后附加新的 GET?

希望我已经正确解释了自己,如果我需要澄清问题,请询问。预先感谢您的意见 :D

<?php

function removeQuery($url, $port = false) {
    $portstring = $port ? ':'.parse_url($url)['port'] : '';
    return parse_url($url)['scheme'].'://'.parse_url($url)['host'] . $portstring . parse_url($url)['path'];
}

// call it like so removeQuery($_SERVER[HTTP_REFERER]);
// If you want the port to be included for instance  on a localhost
// call like so removeQuery($_SERVER[HTTP_REFERER], true);
?>

对于任何感兴趣的人,这是我的答案。

它仅获取 url 和 returns 核心元素(方案、主机、端口[可选] 和路径)。

输入:http://localhost:8888/index.php?err=error_message

输出:http://localhost:8888/index.php(如果端口设置为真)

我可能应该检查是否设置了每个值(使用 isset),但现在它可以工作了。