[英]Generating short encoded string from an array of values
我有一组 5 个动态 ID,我想将它们编码为一个 ID 并将其作为 GET 参数传递。 我现在所做的基本上是:
$ids = [
'user_id' => $request->get('user_id'),
'country_id' => $request->get('country_id'),
'type_id' => 1,
'some_other_id' => $request->get('some_other_id'),
'something_else' => 2,
];
$encoded_id = Cypher::encodeString(json_encode($ids));
return redirect()->away("https://somedomain.com/?id=$encoded_id");
稍后当我收到请求时,我可以对其进行解码:
try {
$ids = Cypher::decodeString($request->get('id'));
echo $ids['country_id'];
} catch (\Exception $e) {
...
}
问题是输出的编码字符串有 304 个字符,所以可能会出现 URL 太长的情况:
https://somedomain.com/?id=eyJpdiI6Ilk0YkVOSUFqUPJLZ1ZGcXNPY8pkOXc9PSIsInZhbHVlIjoieGFVUlNFdlNGSk1wWm1BcE5HREZTMHhxNnZMVktDZ0dCR1RQSk9vZnFASTJTZjZtUGg5cFFtK2FXTCtxOFNlMVM1MU8yTVpyN1wvTFJNNDF1Q1F0Zlwvd0JzaWFCR2NWbTJkM3dxUGtqR21Kcz0iAwJtYWMiOiJlMzdjOWU4NzBjNGI0MGNlNzA1NzVjZWY2ZDI3YWQ0MmMxOWJkOWI4MTQwOGQ5ODc3OTBjMzUwMzViZWY2YjMwIn0=
我想要实现的是更短的东西,例如:
https://somedomain.com/?id=eyJpdiI6Ilk0YkVOSUFqUPJLZ1ZGcXNPY8pkOXc9PSIsInZhbHVlIjoieGFVUlN
我可以轻松解码。
我真的不关心这里的高度安全性,它只是几个 ID 将在那里。 对我来说更重要的是“用户友好”的编码字符串,以及快速编码/解码的能力。 我正在考虑创建一个哈希映射,但是为此会有太多数据。 我该怎么做?
我建议简单地使用base64_encode
和base64_decode
:
$ids = [
'user_id' => $request->get('user_id'),
'country_id' => $request->get('country_id'),
'type_id' => 1,
'some_other_id' => $request->get('some_other_id'),
'something_else' => 2,
];
$encoded_id = base64_encode(implode(',', $ids));
然后解码:
$ids = explode(',', base64_decode($encoded_id));
我已经在https://www.base64encode.org/上进行了测试,字符串11111,2222,33333,44444,55555
变成了MTExMTEsMjIyMiwzMzMzMyw0NDQ0NCw1NTU1NQ==
,长度为 40 个字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.