繁体   English   中英

从值数组生成短编码字符串

[英]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_encodebase64_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM