Чистые ссылки и база данных - PullRequest
2 голосов
/ 01 мая 2011

Допустимо ли, чтобы в моей базе данных был столбец URL, в котором будет храниться URL, такой как: / this-is-a-keyword

А затем использовать этот столбец в моем php-запросе для получения необходимой информации вместо использования целочисленного столбца?

Поэтому, в основном, когда я заходил на Mysite.com/this-is-a-keyword, я возвращал результат из этой строки.

Ответы [ 2 ]

5 голосов
/ 01 мая 2011

Более или менее то, что вы описываете, называется slug , и обычно оно создается путем передачи наиболее описательной строки (обычно заголовка страницы / поста) в функцию slugify, какэтот :

function Slug($string)
{
    return strtolower(trim(preg_replace('~[^0-9a-z]+~i', '-', html_entity_decode(preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8')), ENT_QUOTES, 'UTF-8')), '-'));
}

Проблема с этим, однако, в том, что результат может быть не уникальным, учтите следующее:

echo Slug('Alix Axel');          // alix-axel
echo Slug('Álix Ãxel');          // alix-axel
echo Slug('@Álix----_Ãxel!?!?'); // alix-axel

Все возвращают один и тот же вывод, дажехотя вход отличается.Один из моих любимых (и также наиболее распространенных) подходов заключается в том, чтобы сделать так, как это делает StackOverflow (используя комбинацию идентификатора и пули):

stackoverflow.com / questions / 5845732 / clean-urls-and-database

Если вы хотите избежать этого, вам нужно убедиться, что генерируемый слаг уже не существуетв базе данных, если он добавляет увеличенное число до тех пор, пока не выполнит уникальное условие.

3 голосов
/ 01 мая 2011

Хм, конечно, это обычно называется slug . И вы просто сохраните this-is-a-keyword в базе данных (без косой черты) для запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...