php从长查询字符串创建漂亮的查询字符串

时间:2011-09-13 18:31:58

标签: php query-string

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

例如

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

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

由于

3 个答案:

答案 0 :(得分:1)

从可用性的角度来看,这是一个不好的想法。我作为用户会对你很生气。我建议你阅读URL Design

此外,听起来你想保留用户的东西。如果是这样,那么不安全如果您执行类似

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

答案 1 :(得分:1)

您可以使用一些字符串转换函数来隐藏真实的查询字符串。以下是我使用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对其进行解码。

答案 2 :(得分:0)

一般来说,您不希望将您的网址与用户的任何意义分离,除非您明显将其缩短以用于Twitter帖子等字符限制设置。

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

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

    RewriteEngine On

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