【问题标题】:HTML form with 'get' link without equal signs带有不带等号的“获取”链接的 HTML 表单
【发布时间】:2014-03-08 21:25:03
【问题描述】:

在我的页面中,我有带有多个复选框的 GET 表单。每个checkbox 都有不同的名称和值1。

提交按钮生成这样的 url:localhost/page.php?a=1&b=1

我正在检查 checkbox 是否使用 PHP 函数 isset($_GET['a']) 开启。

一些测试表明,在地址栏 url 中输入 localhost/page.php?a&b 也可以。 有什么办法可以生成这样的链接而不是第一个?

将复选框的值设置为 "" 不起作用 - 它会保留 "=" 符号。

也许我应该编辑.htaccess 文件?

【问题讨论】:

    标签: php html forms get


    【解决方案1】:

    如果您想要一个非常复杂的方法,您可以使用 javascript 取消提交请求,然后仅使用选中的输入名称重定向到该位置。我认为它可能看起来像:

    <form action="page.php" method="get" id="page_form">
        <label for="a">Checkbox A</label><input type="checkbox" name="a" id="a" />
        <input type="submit" value="Submit" id="submit" />
    </form>
    
    <script>
      var page_form = document.getElementById("page_form");
      page_form.onsubmit = forward_request;
    
    function forward_request() {
    
      var inputs = document.getElementById("page_form").elements;
      var clean_query_string = "?";
      for(i = 0; i < inputs.length; i++) {
           if(inputs[i].checked) {
                clean_query_string += inputs[i].name + "&";
           }
      }
    
      window.location = document.getElementById("page_form").action + clean_query_string;
      return false;
    }
    </script>
    

    【讨论】:

    • 是的,这是我想的解决方案,但是禁用 Javascript 时它不起作用..
    • 这给出了他已经拥有的:“page.php?a&b”。如果只检查一个元素,则附加“&”。
    • 这是真的。但是如果禁用了 javascript,它只会提交表单,而那些用户会看到一个丑陋的地址,这不会改变实际结果。那会教他们
    • @Jens-AndréKoch - 不,他想要“page.php?a&b”而不是“page.php?a=1&b=1”。在编写和测试代码后,我已经筋疲力尽了,我认为 OP 可能会担心如何自己修剪尾随的&amp;,因为这很简单。
    • @Anthony 哦,当然,忘了提交按钮不会被取消。无论如何,我需要再编写一个函数,当手动输入(或从书签输入)时,它会检查 URL 中的复选框。没那么复杂,但是它应该在页面加载后运行,并且会在一段时间后检查复选框。
    【解决方案2】:

    不,您无法摆脱 GET 请求中的等号。

    这唯一需要改变的是“&”,通过修改 PHP ini 设置“arg_separator.output”让我们说“;”。 那会给你localhost/page.php?a=1;b=1。 这不是你想要的。

    通过使用 .htaccess RewriteRules 你可能会得到一些东西,比如:

    localhost/page/1/1 
    

    您可以应用以下 .htaccess 规则:

    Options +FollowSymLinks
    RewriteEngine On
    
    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteCond %{SCRIPT_FILENAME} !-f
    
    RewriteRule ^.*$ ./page.php
    

    这个重写规则只是将每个 URL 传递给 page.php(更好的 index.php)。

    例子:

    1. URL = /page/a/b/page/a&amp;b/page/stuff/a/otherstuff&amp;b#123
    2. rewriteRule 已应用
    3. 转发给page.php
    4. 访问 REQUEST_URI 以获取 URL 字符串 (/page/a/b)

    然后您可以通过拆分获取 URL 并按照您的意愿处理它:

    $request_uri = $_SERVER['REQUEST_URI']; // <-- this gives you the url
    
    // next steps are just string processing examples
    
    #remove the directory you don't want
    $request_uri = str_replace('part_not_wanted', '', $request_uri);
    
    #split the path by '/'
    $params     = split("/", $request_uri);
    
    # or split by '&'
    $params     = split("&", $request_uri);
    

    【讨论】:

    • 无法使用 RewriteRules 将 / 更改为 &amp;
    • 当然。那是可能的。我将在我的答案中添加一个示例。
    • 我可以将复选框的值更改为它们的名称。然后我会得到类似"localhost/page/a/b"的链接
    • 感谢您的回答,但它似乎不像我预期的那样工作......所以要使用那些/ 我不应该使用提交按钮而是使用链接?链接可以由 Javascript 生成。所以我可以使用 javascript 生成没有 = 的链接,并且没有 RewriteRules。
    • .htaccess 不会关心调用来自何处:“a href”、“手动输入 url”、“按钮”。它只是转发完整的 URL - 带有 / 和 & 或其他字符。
    猜你喜欢
    • 2019-10-01
    • 2018-08-28
    • 1970-01-01
    • 2023-03-24
    • 2015-10-26
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 2019-11-08
    相关资源
    最近更新 更多