在URL中编码和存储多个变量

时间:2012-11-20 19:19:16

标签: php url variables encode

我知道这是可能的,我在很多网站上都进行了研究,但没有找到任何可以完全满足我需要的东西。

我需要在URL中编码和存储两个参数,然后使用$ _GET方法检索它。

参数不是敏感数据。我的目的主要是混淆它,所以如果没有网站访问,访问者就无法阅读它。

我有这样的事情:

site.com/?name=john&food=banana%20split

我需要它成为这样的东西:

site.com/g57HT90dw8lC5p

我该怎么做?感谢。

(抱歉我的英语不好)

编辑:我应该多解释一下。

  1. 我知道我必须使用mod_rewrite并且我已经覆盖了那部分;
  2. 第二个参数是一个完整的句子(带空格,标点符号等);
  3. 我需要这个来创建一张圣诞卡,所以这些参数都不需要安全的方法。我真正需要存储的只是一个名称和一个简单的消息

5 个答案:

答案 0 :(得分:4)

这是错误的方法 - 你说它不敏感所以你最好修复你的代码,如果有人发送你制作的数据,它就不会被黑客入侵。混淆可以防止普通用户进行更改,但没有人会被这种方式所愚弄。此外,许多浏览器GET是有限的(因此可以配置PHP和服务器),因此这可能会比你想要的更快。但是如果你坚持要这种方法,可以将所有变量放入json_array,然后使用base64进行编码。

$myData = array('foo'=>1, 'bar'=>'hax0r');
$arg = base64_encode( json_encode($myData) );

http://site.com/secret=$arg

并返回:

$myData = json_decode( base64_decode( $_GET['secret'] ) );

但是再次 - 这在设计上是错误的。

答案 1 :(得分:2)

将两个字符串值附加在一起;然后使用一些编码函数,如str_rot13或其他

答案 2 :(得分:1)

你可以uuencode

在创建

$converted = convert_uuencode('?name=john&food=banana');
// 6/VYA;64]:F]H;B9F;V]D/6)A;F%N80``

解码时

$query = $_SERVER['QUERY_STRING'];
// 6/VYA;64]:F]H;B9F;V]D/6)A;F%N80``
$real = convert_uudecode($query);
// ?name=john&food=banana

uuencoding的目的是使数据对网络传输安全。它不提供保护,但它会使它们成为明文之外的东西。

答案 3 :(得分:1)

尝试使用这些PHP函数convert_uuencodeconvert_uudecode

比仅使用base64

更安全
function encrypt_decrypt ($data, $encrypt) {
    if ($encrypt == true) {
        $output = base64_encode (convert_uuencode ($data));
    } else {
        $output = convert_uudecode (base64_decode ($data));
    }
    return $output;
}

$enc_txt = encrypt_decrypt ("name=john&food=banana%20split", true);
echo $enc_txt."\n";
// PTtGJU05M1VKO1ZBTilGOU87VjBdOEYlTjg2WUEpMyhQPFchTDo3MGAKYAo=
echo encrypt_decrypt ($enc_txt, false);
// name=john&food=banana%20split

答案 4 :(得分:0)

查看PHP文档Base64Encode。只需对字符串进行编码,并在读取查询时对其进行解码。