【问题标题】:remove GET parameter in URL after processing is finished(not using POST), PHP处理完成后删除 URL 中的 GET 参数(不使用 POST),PHP
【发布时间】:2012-11-27 04:11:26
【问题描述】:

我有这样的网址http://localhost/join/prog/ex.php

当我使用 GET 方法时,像这样的 url 地址http://localhost/join/prog/ex.php?name=MEMORY+2+GB&price=20&quantity=2&code=1&search=add

我的问题是: 所以,我仍然使用 GET 方法,但我想在 GET 方法中的处理完成后,我想将 url 返回(删除参数)到http://localhost/join/prog/ex.php,就像以前一样(不使用 POST 方法)。我该怎么做?

【问题讨论】:

  • 您可以进行标头重定向,但目的是什么?
  • 不丢失变量?看不出你为什么会这样,但无论如何 html5 pushState
  • @pekka:没有重定向,但我想在使用 GET 方法完成后删除参数(只需删除参数)
  • 布拉德,有时,人们有您不了解的需求(这与您无关)。我的网站只使用一个页面,该页面是使用 ajax 动态操作的。我的网页基本上从未刷新过。我现在需要发送一封电子邮件,其中包含一个链接,单击该链接后,将直接导航到站点的一个子部分并加载一个对象。从电子邮件中,我无法使用 javascript。所以我无法向我的页面发送 POST。这意味着我必须发送一个 GET。但由于页面从不刷新,GET 参数将永远保留在地址中,并在按下 F5 时导致问题。
  • 底线是:当我们提出问题时,我们想要答案。不是意见。仅仅因为他试图做的事情在你的项目中没有意义并不意味着它在他们的项目中没有意义。你也可以争辩说我的项目很糟糕,我应该有不同的页面,而不是一个单一的 ajax 刷新页面......但同样,你会谈论你不知道的事情。我没有开始这个项目,也没有选择使用这样的框架。我已经从其他人那里接手了这个项目,现在我坚持下去了。所以,请。给出答案,而不是意见。谢谢。

标签: php html url get


【解决方案1】:

将其放入您的 HTML 文件 (HTML5)。

<script>    
    if(typeof window.history.pushState == 'function') {
        window.history.pushState({}, "Hide", "http://localhost/join/prog/ex.php");
    }
</script>

或者使用例如使用会话的后端解决方案;

<?php
    session_start();

    if (!empty($_GET)) {
        $_SESSION['got'] = $_GET;
        header('Location: http://localhost/join/prog/ex.php');
        die;
    } else{
        if (!empty($_SESSION['got'])) {
            $_GET = $_SESSION['got'];
            unset($_SESSION['got']);
        }

        //use the $_GET vars here..
    }

【讨论】:

  • &lt;script&gt; if(typeof window.history.pushState == 'function') { window.history.pushState({}, "Hide", "http://localhost/join/prog/ex.php"); } &lt;/script&gt;。它的工作原理,谢谢。
  • JS 解决方案仅适用于兼容 HTML5 的浏览器。后端版本适用于任何情况。
  • &lt;script&gt; if(typeof window.history.pushState == 'function') { window.history.pushState({}, "Hide", "examplePage.php"); } &lt;/script&gt; 太好了,谢谢
  • 控制台:SecurityError:操作不安全。
【解决方案2】:

简单的答案

只需将其放在您需要的文件顶部,以使 GET 查询在加载后从浏览器的 URL 栏中消失。

<script>    
    if(typeof window.history.pushState == 'function') {
        window.history.pushState({}, "Hide", '<?php echo $_SERVER['PHP_SELF'];?>');
    }
</script>

【讨论】:

  • 或者留在当前页面添加到 url strtok($_SERVER["REQUEST_URI"],'?') 否则你只会得到网页的 url (example.com) 例如window.history.pushState({}, "Hide", '&lt;?php echo $_SERVER['PHP_SELF'].strtok($_SERVER["REQUEST_URI"],'?');?&gt;');
【解决方案3】:

我猜想在调用你想要重定向到文件 ex.php 的 url 之后,但这次没有任何参数。 为此尝试在 ex.php 中使用以下代码

<?
if($_GET['name']!='' || $_GET['price']!='' ||$_GET['quantity']!='' ||$_GET['code']!='' || $_GET['search']!=''){ 

/* here the code checks whether the url contains any parameters or not, if yes it will execute parameters stuffs and it will get redirected to the page http://localhost/join/prog/ex.php without any parameters*/

/* do what ever you wish to do, when the parameters are present. */

echo $name;
print $price;
//etc....

$location="http://localhost/join/prog/ex.php";
echo '<META HTTP-EQUIV="refresh" CONTENT="0;URL='.$location.'">';
exit;
}
else{
 /* here rest of the body i.e the codes to be executed after redirecting or without parameters.*/
echo "Hi no parameters present!";
}
?>

您在这里所做的只是将重定向重定向到同一页面,而不检查查询字符串中是否存在任何参数。代码智能地检查参数是否存在,如果有任何参数,它将重定向到 ex.php,否则它将打印“您好,没有参数存在!”字符串!

【讨论】:

    【解决方案4】:

    如果您使用的是 apache,请考虑使用带有 mod_rewirte 的 .htaccess 文件。 Here 快速入门。我认为在 iis 上也可以使用 web.config 文件获得此结果

    【讨论】:

      【解决方案5】:

      您可以为此使用removable_query_args 过滤器。

      add_filter( 'removable_query_args', function( $vars ) {
              $vars[] = 'name';
              $vars[] = 'price';
              $vars[] = 'quantity';
              $vars[] = 'code';
              $vars[] = 'search';
      
              return $vars;
          } );
      

      但是您应该为您的案例添加特定条件,否则,它也会从您网站上的所有其他 URL 中删除这些 Get-parameters。 更多信息here

      【讨论】:

        猜你喜欢
        • 2017-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-06
        相关资源
        最近更新 更多