Я создаю службу сокращения ссылок, и я использую кодировку / декодирование 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-адресами.