【问题标题】:URL being re-encoded?URL被重新编码?
【发布时间】:2019-01-31 00:05:38
【问题描述】:

我有几个看起来像这样的链接:

https://www.example.com/find?category=food%20%26%20drink

单击该链接应该会将我带到一个页面,我可以在其中获取变量,并且它应该显示为“食物和饮料”。

但是,当我点击链接时,它会将我带到这个网址:

https://www.example.com/find?category=food%2520%2526%2520drink

变量读取:food%20%26%20drink。

如果我将第一个 url 直接粘贴到搜索栏中,它可以正常工作。但是如果我点击它作为一个链接,那么它会以某种方式重新编码。

知道如何让它阅读“食物和饮料”,即使它来自不同的页面?

非常感谢!

【问题讨论】:

  • 工作正常,问题不可重现。您需要显示您的代码。见How to Askminimal reproducible example
  • urldecode php 中的函数应该解码 url 参数
  • 你是如何创建链接的?看起来你正在对它进行双重编码。似乎在这里工作得很好~JSFiddle

标签: php html url encode


【解决方案1】:

意识到链接写为http 而不是https。 因此,它们在单击时被htaccess 文件重写为https,同时也被重新编码。

【讨论】:

    【解决方案2】:

    您拥有的链接是双重编码的。可能的解决方案是

    1. 找到链接再次编码的代码行,如果已经编码,则使用户不编码。这里给出了几个例子Click Here
    2. 如果无法更改生成 URL 的代码形式,则必须使用 urldecode 两次来解析 url 参数
    <?php
    $query = "https://www.example.com/find?category=food%2520%2526%2520drink";
    
        $param = explode("=", $query);
    
        print_r(urldecode(urldecode($param[1])));
    ?>
    

    希望这会有所帮助!

    【讨论】:

    • 1.如果有多个 URL 参数,这将中断。 2. parse_url()parse_str() 将构成一个适当的解决方案。 3. OP 询问的是如何阻止这种情况的发生,而不是如何扭转它。
    • 这就是我提到的,如果他确定这是 OP 正在寻找的确切格式,那么它很好,否则它必须从 root 修复
    猜你喜欢
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 2013-09-14
    • 2013-07-08
    • 2014-10-08
    • 1970-01-01
    相关资源
    最近更新 更多