Я создаю сервис сокращения ссылки, и я использую кодирование/декодирование base64 увеличенного поля ID для создания моих URL. URL с идентификатором "6" был бы: http://mysite.com/Ng==
Я должен также позволить пользователям создавать пользовательское имя URL, как http://mysite.com/music
Вот мой (возможно дефектный) подход до сих пор. Справка в фиксации его ценилась бы.
Когда кто-то создает новую ссылку:
Когда кто-то создает новую ссылку и передает пользовательский короткий URL:
Существует ли лучший метод кодирования, который позволит мне превратить какое-либо число в короткую строку и какую-либо строку в число, таким образом, я всегда могу поиск, короткие URL (или пользовательский или автоматически сгенерированный) путем превращения имени в число и запросов для ссылки с идентификатором равняются тому числу?
Прежде всего, убедитесь, что у вас есть ограничения уникальности в столбцах ID
и short_url_code
.
Когда кто-то создает новую ссылку:
ID
из базы данных ( по соображениям производительности вам ДЕЙСТВИТЕЛЬНО следует использовать автоинкремент
или ] ПОСЛЕДОВАТЕЛЬНОСТЬ
, в зависимости от того, что предлагает ваша СУБД; в противном случае выберите MAX (ID) +1
) http://website.com / [краткое имя URL]
) из ID
с использованием base64_encode
или любой другой пользовательской или стандартной схемы кодирования
таблица: ID, short_url_code, destination_url
Если вставка не удалась из-за нарушения ограничения, вернитесь к шагу 1, чтобы попробовать новый ID
; у вас могло быть нарушение, потому что:
автоинкремент
или SEQUENCE
, и может случиться довольно часто в противном случае) и / или short_url_code
уже использовался в качестве настраиваемого URL-адреса (это будет происходить очень редко, если только кто-то не пытается создать проблемы на вашем сайте) Если вставка прошла успешно, зафиксируйте и верните короткий URL-адрес пользователю
Когда кто-то создает новую ссылку и передает собственный короткий URL:
ID
, как на шаге 2 выше, используйте пользовательский short_url_code
, предоставленный пользователем ID
: вернитесь к шагу 1, чтобы попробовать новый ID
short_url_code
: вернуть пользователю ошибку с просьбой выбрать другой cust om URL, поскольку предоставленный им короткий URL уже был использован base64 можно использовать для создания коротких URL-адресов, но он также может сделать URL-адрес длиннее. Например, base64_encode числа 1 - «MQ ==», что в 4 раза больше размера. Base64 всегда будет иметь 2 символа для получения 64 бита, что не идеально для коротких URL-адресов.
Если размер является наиболее важным фактором, возможно, вы сможете создавать самые короткие URL-адреса, полагаясь на интернационализацию .
Это может сделать URI довольно длинным (до 9 символов ASCII для одного символа Unicode), но намерение состоит в том, что браузеры должны отображать только декодированную форму, и многие протоколы могут отправлять UTF-8 без экранирования% HH .
Имейте в виду, что браузеры довольно хорошо работают с UTF-8, и у twitter не возникнет проблем с этими URL-адресами.