@mts2050

Из кириллицы в латиницу. Конвертация в php?

Есть функция <?php echo $category['name']; ?>, которая выводит "Я в будке".
Можно ли конвертировать ее в ya_v_budke средствами php, и как это сделать?
  • Вопрос задан
  • 4303 просмотра
Пригласить эксперта
Ответы на вопрос 5
/**
     * Функиция транслитерации
     * @param string
     * @return string
     */
    public function translit($st)
    {
        $st = mb_strtolower($st, "utf-8");
        $st = str_replace([
            '?', '!', '.', ',', ':', ';', '*', '(', ')', '{', '}', '[', ']', '%', '#', '№', '@', '$', '^', '-', '+', '/', '\\', '=', '|', '"', '\'',
            'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'з', 'и', 'й', 'к',
            'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х',
            'ъ', 'ы', 'э', ' ', 'ж', 'ц', 'ч', 'ш', 'щ', 'ь', 'ю', 'я'
        ], [
            '_', '_', '.', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_',
            'a', 'b', 'v', 'g', 'd', 'e', 'e', 'z', 'i', 'y', 'k',
            'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h',
            'j', 'i', 'e', '_', 'zh', 'ts', 'ch', 'sh', 'shch',
            '', 'yu', 'ya'
        ], $st);
        $st = preg_replace("/[^a-z0-9_.]/", "", $st);
        $st = trim($st, '_');

        $prev_st = '';
        do {
            $prev_st = $st;
            $st = preg_replace("/_[a-z0-9]_/", "_", $st);
        } while ($st != $prev_st);

        $st = preg_replace("/_{2,}/", "_", $st);
        return $st;
    }
Ответ написан
master2016
@master2016
Всё нормально.
Нет. Только через написание своей функции подстановки символов или использование уже написанной.
Ответ написан
Комментировать
@Nc_Soft
В laravel есть str_slug
Ответ написан
Комментировать
artzolin
@artzolin
php, WordPress разработка сайтов artzolin.ru
Вам подойдет функция sanitize_title(); Но некоторые спецсимволы будут конвертированы в юникод-формат вида %2С и т.д. Лучше всего декодировать их с помощью urldecode() и удалить из строки все символы за исключением латинских букв, цифр, дефиса и нижнего подчеркивания

$post_slug = urldecode( sanitize_title($post_title) );
$post_slug = preg_replace('/([^a-z\d\-\_])/', '', $post_slug);
Ответ написан
Комментировать
ImidgX
@ImidgX
webmaster freelancer (full stack)
Раньше я тоже писал свой "велосипед".
Но порывшись в документации нашёл встроенную функцию, см. https://www.php.net/manual/ru/transliterator.trans...
Пример:
function slugify($string) {
    $string = iconv("UTF-8", "ASCII//TRANSLIT//IGNORE",transliterator_transliterate("Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC; [:Punctuation:] Remove; Lower();", $string));//iconv нужен для ьъ
    $string = str_replace("?", "", $string);
    $string = preg_replace('/[-\s]+/', '-', $string);
    return trim($string, '-');
}
echo slugify("Я люблю PHP!");//a-lublu-php
echo PHP_EOL;
echo slugify("Съешь же ещё этих мягких французских булок, да выпей чаю");//ses-ze-ese-etih-magkih-francuzskih-bulok-da-vypej-cau

Оказывается уже с версии PHP 5.4.0 можно было использовать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы