Генерация коротко закодированной строки из массива значений - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть набор из 5 динамических c идентификаторов, которые я хочу закодировать как один отдельный идентификатор и передать его в качестве параметра 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

, который я мог бы легко декодировать ,

Я не особо беспокоюсь о строгой безопасности здесь, там всего несколько удостоверений личности. Для меня важнее «удобная для пользователя» закодированная строка и возможность быстро ее кодировать / декодировать. Я думал о создании карты ha sh, но для этого будет слишком много данных. Как я могу это сделать?

1 Ответ

1 голос
/ 11 февраля 2020

Я бы предложил просто использовать 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 символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...