Проблема в отображении URL-адреса слизи с тире - PullRequest
4 голосов
/ 15 апреля 2010

Я сделал пробку с чертой для URL своих историй, таких как:

Выборка записей с слагом вместо ID

Это мой код для создания слаг:

function Slugit($title) {
    $title = strip_tags($title);
    // Preserve escaped octets.
    $title = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title);
    // Remove percent signs that are not part of an octet.
    $title = str_replace('%', '', $title);
    // Restore octets.
    $title = preg_replace('|---([a-fA-F0-9][a-fA-F0-9])---|', '%$1', $title);


    $title = remove_accents($title);
    if (seems_utf8($title)) {
        if (function_exists('mb_strtolower')) {
            $title = mb_strtolower($title, 'UTF-8');
        }
        $title = utf8_uri_encode($title, 500);
    }

    $title = strtolower($title);
    $title = preg_replace('/&.+?;/', '', $title); // kill entities
    $title = str_replace('.', '-', $title);
    $title = preg_replace('/[^%a-z0-9 _-]/', '', $title);
    $title = preg_replace('/\s+/', '-', $title);
    $title = preg_replace('|-+|', '-', $title);
    $title = trim($title, '-');


    return $title;
}

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

Итак, я написал что-то, чтобы убрать тире:

$string = str_replace('-', ' ', $string);

Но если в URL есть ? или ., он не может отображаться!

Любая помощь, чтобы восстановить исходный URL?!

Ответы [ 2 ]

8 голосов
/ 15 апреля 2010

Если у вас есть такой URL:

/1844077/problema-v-otobrazhenii-url-adresa-slizi-s-tire

Часть problem-in-displaying-a-slug-with-dash не очень важна: она просто приятно:

  • для отображения
  • для пользователей, чтобы прочитать и посмотреть, о чем вопрос
  • для поисковой системы, как механизм SEO.


Что действительно важно , в этом URL, - это 2647789 часть : это идентификатор вопроса в базе данных - т.е. это та часть URL, который используется для загрузки вопроса.

Это означает, что нет необходимости преобразовывать слаг в то, что было впервые введено пользователем: важно только то, что вы передаете идентификатор своих данных в каждом URL-адресе и используете его для поиска своих данных.


И, если вам нужны какие-то доказательства: попробуйте перейти к Проблема с отображением URL-адреса с dash без slug: вы увидите, что ваш вопрос загружается просто отлично;

0 голосов
/ 15 апреля 2010

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

...