Intereting Posts
Поиск виртуальной машины с Xdebug, работающей для PHP в Netbeans Как я могу предотвратить SQL-инъекцию в PHP? Неожиданный конец ввода JSON при отправке данных tinyMCE с использованием Ajax Как получить имя объекта или класса? Как запустить PHP-скрипт из командной строки с помощью MAMP? Как я могу использовать этот атрибут класса в PHP, чтобы получить общее значение для всех экземпляров класса? Облачная платформа Google. Как загрузить файл изображения в ведро Google Cloud Storage? Как проверить, существует ли значение массива? Переупорядочить XML-результаты на основе данных XML Как предотвратить появление форм из опорожнения, отправив форму в html? Что может вызвать прерывистый SQLSTATE Нет таких ошибок файла или каталога из php PDO mysql в Debian Lenny? Использование строкового пути для удаления элемента из массива бесконечный цикл php Отправка SMS с помощью услуг Amazon AWS PHP Вызов функции PHP

Укорачивание URL: лучший метод кодирования?

Я создаю службу сокращения ссылок, и я использую кодировку / декодирование base64 поля с добавленным идентификатором для создания моих URL-адресов. URL с идентификатором «6» будет: http://mysite.com/Ng==

Мне также нужно разрешить пользователям создавать настраиваемое имя URL-адреса, например http://mysite.com/music

Вот мой (возможно, ошибочный) подход. Помощь в исправлении будет оценена.

Когда кто-то создает новую ссылку:

  • Я получаю самый большой идентификатор ссылки из базы данных (он не увеличивается автоматически)
  • Увеличьте ID на 1
  • Создайте короткий URL-код ( http://website.com/[short url name)) с помощью base64_encoding, который ID
  • Вставить в таблицу ссылок: id, short_url_code, destination_url

Когда кто-то создает новую ссылку и передает собственный короткий URL-адрес:

    • Мой план был base64_decode своей пользовательской строкой и использовал это как ID ссылки, но я не понимал, что вы не можете просто base64_decode любую буквенно-цифровую строку и превратить ее в число.

    Есть ли лучший метод кодирования, который позволит мне превратить любое число в короткую строку и любую строку в число, поэтому я всегда могу найти короткие URL-адреса (независимо от того, был ли пользователь или автогенерирован), превратив имя в число и запросив ссылку с идентификатором, равным этому числу?

    Related of "Укорачивание URL: лучший метод кодирования?"

    Прежде всего, убедитесь, что в столбцах ID и short_url_code установлены ограничения на short_url_code .

    Когда кто-то создает новую ссылку:

    1. Получите следующий наибольший ID ссылки из базы данных ( по соображениям эффективности вы действительно должны ДЕЙСТВИТЕЛЬНО использовать autoincrement или SEQUENCE , в зависимости от того, что предлагает ваша СУБД, в противном случае выберите MAX(ID)+1 )
    2. Создайте короткий URL-адрес ( http://website.com/[short url name] ) из ID используя base64_encode или любую другую base64_encode или стандартную схему кодирования
    3. Вставить в таблицу links : ID, short_url_code, destination_url
    4. Если вставка терпит неудачу из-за нарушения ограничения, вернитесь к шагу 1, чтобы попробовать новый ID ; вы, возможно, имели нарушение, потому что:

      1. тот же идентификатор уже использовался (т.е. вставлен) параллельно другим потоком / процессом и т. д. (это не произойдет, если вы использовали autoincrement или SEQUENCE и могут часто встречаться в противном случае) и / или
      2. тот же short_url_code уже используется как пользовательский URL (это произойдет очень редко, если кто-то не пытается вызвать проблемы на вашем сайте)
    5. Если вставка выполнена успешно, скопируйте и верните короткий URL-адрес пользователю

    Когда кто-то создает новую ссылку и передает собственный короткий URL-адрес:

    1. Выполните тот же шаг 1, что и выше
    2. Вместо того, чтобы генерировать короткую часть URL из ID как на шаге 2 выше, используйте пользовательский short_url_code предоставленный пользователем
    3. Выполните тот же шаг 3, что и выше
    4. Если вставка не удалась из-за:
      1. нарушение ограничения на ID : вернитесь к шагу 1, чтобы попробовать новый ID
      2. нарушение ограничения на short_url_code : вернуть пользователю ошибку, требуя, чтобы он выбрал другой настраиваемый URL-адрес, поскольку короткий URL-адрес, который он предоставил, уже был использован
    5. Выполните тот же шаг 5, что и выше

    base64 можно использовать для создания коротких URL-адресов, но он также может увеличить URL-адрес. Например, base64_encode числа 1 является «MQ ==», размер которого в 4 раза больше. Base64 всегда будет иметь 2 символа для получения 64 бит, что не подходит для коротких URL-адресов.

    Если размер является самым важным фактором, то вы, возможно, сможете создавать кратчайшие URL-адреса, полагаясь на интернационализацию .

    Это может сделать URI довольно длинным (до 9 символов ASCII для одного символа Юникода), но намерение состоит в том, что браузеру нужно отображать только декодированную форму, и многие протоколы могут отправлять UTF-8 без экранирования% HH.

    Имейте в виду, что браузеры хорошо работают с UTF-8, и твиттер не будет иметь проблем с этими URL-адресами.