【问题标题】:php create beautiful query string from long query stringphp 从长查询字符串创建漂亮的查询字符串
【发布时间】:2011-09-13 18:31:57
【问题描述】:

我想从长且易于理解的查询字符串创建一个漂亮的查询字符串

例如

http://www.domain.com/play.php?a=10&b=20&c=30

首先这是不同的长查询字符串,其次是可以理解 a,b&c 的值。

我想要的是 php 函数,它将整个查询字符串转换为 a=10&b=20&c=30 到一些文本,如 f4cdret4

然后我通过同样的方式

http://www.domain.com/play.php?q=f4cdret4

play.php 中我再次将f4cdret4 转换回a=10&b=20&c=30

我正在尝试找到类似的东西,但很多天都没有成功。

谢谢

【问题讨论】:

标签: php query-string


【解决方案1】:

从可用性的角度来看,这是一个坏主意。作为用户,我会对你感到恼火。我建议你阅读URL Design

另外,听起来你想对用户隐瞒一些事情。如果是这样,如果您执行类似的操作,则 不安全

$url .= '?q=' . base64_encode(http_build_query($parms));

【讨论】:

    【解决方案2】:

    您可以使用一些字符串转换函数来隐藏真正的查询字符串。这是我使用bin2hexpack 提出的一个简单示例

    <?php
    $str = 'a=10&b=5&c=20&d=6';
    $encoded = bin2hex($str);
    echo $encoded;
    echo "\n";
    echo pack("H*",$encoded);
    ?>
    

    example 您可以使用bin2hex 对其进行编码,并使用pack 对其进行解码。

    【讨论】:

      【解决方案3】:

      一般来说,您不希望将您的 URL 与对用户的任何表面意义相分离,除非您显着缩短它以用于 Twitter 帖子等字符限制设置。

      也就是说,有几种方法可以实现这一点。你可以:

      • 预先生成这些 URL 并将交叉引用的查询字符串存储在数据库中(使用“f4cdret4”作为唯一索引,“a=10&b=20&c=30”作为第二列)
      • 用某种分隔符将它们混合在一起(a=10&b=20&c=30 变为“a10-b20-c30”)
      • 使用 htaccess 创建伪目录(a=10&b=20&c=30 变为“mydomain.com/q/10/20/30”)

        RewriteEngine On

        RewriteRule /q/(.*)/(.*)/(.*)$ /page/play.php?a=$1&amp;b=$2&amp;c=$3

      【讨论】:

        猜你喜欢
        • 2011-12-15
        • 2013-06-14
        • 2014-10-28
        • 1970-01-01
        • 2021-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多