为了账号安全,请及时绑定邮箱和手机立即绑定

PHP替换'?'之后的删除字符串

PHP替换'?'之后的删除字符串

PHP
慕姐4208626 2022-07-02 15:53:58
我有一个登录功能,您可以在 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。所以我的问题是如何修剪 HTTP_REFERER 以便清除它包含的任何先前的 GET,然后附加新的 GET?希望我已经正确解释了自己,如果我需要澄清问题,请询问。提前感谢您的评论:D
查看完整描述

1 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

<?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 并仅返回核心元素(方案、主机、端口 [可选] 和路径)。


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


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


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


查看完整回答
反对 回复 2022-07-02
  • 1 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信