Как преобразовать хороший заголовок страницы в правильную строку URL? - PullRequest
9 голосов
/ 07 марта 2011

представьте заголовок страницы на любом языке (английском, арабском, японском и т. Д.), Содержащий несколько слов в UTF-8.Пример:

$stringRAW = "Blues & μπλουζ Bliss's ブルース Schön";

Теперь это действительно нужно преобразовать во что-то, что является действительной частью URL этой страницы:

$stringURL = "blues-μπλουζ-bliss-ブルース-schön"

просто проверьте эту ссылку Это работает и на моем сервере!

Q1 .Какие символы разрешены в качестве действительного URL в эти дни?Я помню, что видел все арабские строки, сидящие в браузере, и я протестировал их на своем apache 2, и все работало нормально.

Я думаю, это должно стать: $stringURL = "blues-blows-bliss-black"

Q2. Какие существующие функции php, как вы знаете, корректно кодируют / преобразуют эти строки UTF-8 для URL, обрезающего их с любых недопустимых символов?

Я предполагаю, что по крайней мере: 1. пробелы должны быть преобразованы в тире -
2. удалить недопустимые символы?какие они?@ и '&'?
3. преобразует все буквы в нижний регистр (или допустимы прописные буквы в URL?)

Спасибо: ваши предложения очень ценятся!

Ответы [ 5 ]

11 голосов
/ 07 марта 2011

это решение, которое я использую:

$text = 'Nevalidní Český text';
$text = preg_replace('/[^\\pL0-9]+/u', '-', $text);
$text = trim($text, "-");
$text = iconv("utf-8", "us-ascii//TRANSLIT", $text);
$text = preg_replace('/[^-a-z0-9]+/i', '', $text);

Заглавные буквы в URL не являются проблемой, но если вы хотите, чтобы текст был строчным, просто добавьте $text = strtolower($text); в конце: -).

7 голосов
/ 07 марта 2011

Я бы использовал:

$stringURL = str_replace(' ', '-', $stringURL); // Converts spaces to dashes
$stringURL = urlencode($stringURL);
2 голосов
/ 07 марта 2011

выберите название вашей веб-страницы $title = "mytitle#$3%#$5345"; просто urlencode это

$url = urlencode($title);

вам не нужно беспокоиться о мелких деталях, но не забудьте указать свой URL-запрос. Лучше всего использовать уникальный префикс идентификатора в URL-адресе, такой как /389894/sdojfsodjf, во время процесса маршрутизации вы можете использовать идентификатор 389894 для получения темы sdojfsodjf.

2 голосов
/ 07 марта 2011
$stringURL = preg_replace('~[^a-z ]~', '', str_replace(' ', '-', $stringRAW));

Проверьте этот метод: http://www.whatstyle.net/articles/52/generate_unique_slugs_in_cakephp

1 голос
/ 07 марта 2011

Вот краткий и удобный, который делает трюк для меня

$title = trim(strtolower($title));  // lower string, removes white spaces and linebreaks at the start/end
$title = preg_replace('#[^a-z0-9\s-]#',null, $title); // remove all unwanted chars
$title = preg_replace('#[\s-]+#','-', $title); // replace white spaces and - with - (otherwise you end up with ---)

и, конечно, вам нужно обрабатывать умлауты, знаки валюты и т. Д. В зависимости от возможного ввода

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