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 );