Для входящего запроса вам нужно декодировать фрагмент URL. Когда вы создаете URL, вы берете свой идентификатор и кодируете его. Таким образом, учитывая URL http://domain/page/
dnwnyub46m50
, вы возьмете этот фрагмент и расшифруете его. Пример:
#> echo 'dnwnyub46m50'| base32 -d
my_id5
Библиотека, на которую вы ссылаетесь, нечувствительна к регистру, поэтому вы получите тот же результат следующим образом:
echo 'DNWNYUB46M50'| base32 -d
my_id5
При работе с любой схемой кодирования (Base-16/32/64) у вас есть две основные операции: encode
, которая работает с необработанным потоком битов / байтов, и decode
, которая принимает кодированный набор байт и возвращает исходный бит / поток байтов. Страница Википедии о кодировке Base32 - отличный ресурс.
Когда вы декодируете строку, вы получаете необработанные байты: возможно, эти байты несовместимы с ASCII
, UTF-8
или какой-либо другой кодировкой, с которой вы пытаетесь работать. Вот почему ваши декодированные примеры выглядят как пробелы: используемые вами инструменты не распознают полученные байты как допустимые символы.
Способ кодирования идентификаторов зависит от того, как генерируются ваши идентификаторы. Вы не сказали, как генерировали базовые идентификаторы, поэтому я не могу делать предположений ни о том, как вы должны обрабатывать необработанные байты, которые выходят из декодера, ни о содержимом необработанных байтов, передаваемых в кодировщик.
Также важно упомянуть, что библиотека, с которой вы связаны, несовместима с кодировкой Crockford Base32. Библиотека исключает I, L, O, S
, а кодировка Крокфорда исключает I, L, O, U
. Это будет проблемой, если вы пытаетесь взаимодействовать с другой системой, которая использует другую библиотеку. Если никому, кроме вас, никогда не понадобится декодировать фрагменты URL-адресов, совместимость не имеет значения.