Генерация URL из строки

SiZE

Новичок
Предлагаю небольшую дискуссию на тему генерации URL из строки. Ниже приведен код. Кто знает как его можно упростить? Входящие данные передаются через POST в JSON формате, кодировка UTF-8. Оставляем только «a-z0-9_-», русские буквы подвергаем транслитерации и прописные заменяем строчные, ну и далее собственно по комментариям должно быть все понятно.

PHP:
$url = trim( $_POST['url'] );

// Оставляем только буквы латинского и русского алфавита, пробелы, знаки тире и подчеркивания
$new_url = preg_replace( '#[^a-z0-9 _\-абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ]*#i', '', $url );
// Данные передаются в json формате, кодировке utf-8 и при наличии русских букв без конвертации ничего не работает
$new_url = mb_convert_encoding( $new_url, "UTF-8", "auto" );
// Заменяем пробелы на подчеркивания
$new_url = str_replace( ' ', '_', $new_url );
// Убираем двойные подчеркивания
$new_url = preg_replace( '#[_]{2,}#', '_', $new_url );
// Убираем подчеркивания в налаче и конце строки
$new_url = preg_replace( '#^_?(.*?)_?$#', '$1', $new_url );
// Заменяем русские буквы на транслит
$new_url = str_replace( $GLOBALS['translit'][0], $GLOBALS['translit'][2], $new_url );
$new_url = str_replace( $GLOBALS['translit'][1], $GLOBALS['translit'][3], $new_url );
// Заменяем прописные на строчные
$new_url = mb_strtolower( $new_url );
 

WDStalker

Новичок
zerkms
я просто написал, чем сталкивался из практики, а так любое решение вправе существовать.
 

zerkms

TDD infected
Команда форума
PHP:
//пустой конструктор, чтобы методы могли работать через ::
адовый коммент, кстати
 
  • Like
Реакции: Dovg

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
PHP:
preg_replace( '#[^a-z0-9 _\-абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ]*#i', '', $url );
по-моему вообще феерический звездец
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
fixxxer
внимательно читаем первый пост.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
на примере этого форума предполагаю, что русский можно уже и не транслитировать
 
Сверху