Я ищу, чтобы создать URL-строку, подобную той, которая используется SO для ссылок на вопросы. Я не смотрю на переписывание url (mod_rewrite). Я ищу создание ссылки на странице.
Пример: Имя вопроса:
Is it better to use ob_get_contents() or $text .= 'test';
URL-адрес заканчивается:
http://stackoverflow.com/questions/292068/is-it-better-to-use-obgetcontents-or-text-test
Часть меня интересует:
is-it-better-to-use-obgetcontents-or-text-test
Поэтому в основном я ищу, чтобы очистить все, что не является буквенно-цифровым, сохраняя при этом URL-адрес читаемым. У меня есть следующее созданное, но я не уверен, что это лучший способ или он охватывает все возможности:
$str = urlencode( strtolower( str_replace('--', '-', preg_replace(array('/[^a-z0-9 ]/i', '/[^a-z0-9]/i'), array('', '-'), trim($urlPart)))));
Итак, в основном:
strtolower()
urlencode()
– вероятно, не нужен, но просто для хорошей меры. Как вы уже указали, urlencode () в этом случае не нужен, и ни трима (). Если я правильно понимаю, шаг 4 состоит в том, чтобы избежать нескольких тире в строке, но это не помешает более двух тире. С другой стороны, тире, соединяющие два слова (например, «крупномасштабные»), удаляются вашим решением, пока они, похоже, сохраняются на SO.
Я не уверен, что это действительно лучший способ сделать это, но вот мое предложение:
$str = strtolower( preg_replace( array('/[^a-z0-9\- ]/i', '/[ \-]+/'), array('', '-'), $urlPart ) );
Так: