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