diff --git a/functions/func.locale.php b/functions/func.locale.php index 2cfc0af..4512ca3 100644 --- a/functions/func.locale.php +++ b/functions/func.locale.php @@ -739,19 +739,30 @@ * @param string $st * @return string */ - function prepare_fname($st) - { - $st = strip_tags($st); +function prepare_fname($st) +{ + $st = strip_tags($st); - $st = strtr($st,'ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЪЫЭЮЯ', - 'abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщьъыэюя'); + // 1. Сначала пробуем использовать новый метод + if (function_exists('mb_strtolower')) { + $st = mb_strtolower(trim($st), 'UTF-8'); + } else { + // Запасной вариант (старый), если mbstring не установлен + $st = strtr($st,'ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЪЫЭЮЯ', + 'abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщьъыэюя'); + } - $st = translit_string(trim($st)); + // 2. Транслитерация + if (function_exists('translit_string')) { + $st = translit_string($st); + } - $st = preg_replace(array('/[^a-z0-9_-]/', '/--+/'), '-', $st); + // 3. Финальная чистка + // Заменяем всё, что не буквы и не цифры, на дефис + $st = preg_replace(array('/[^a-z0-9_-]/', '/--+/'), '-', $st); - return trim($st, '-'); - } + return trim($st, '-'); +} /**