Перевод русского текста в транслит

Форум для тех кто начинает осваивать язык php.
Аватара пользователя
Slash
Администратор
Сообщения: 2028
Поблагодарили: 62 раза

Перевод русского текста в транслит

Сообщение Slash » Вс окт 19, 2014 6:58 pm

Перевод русского текста в транслит
Данная конструкция может быть полезна для создания ЧПУ

Код: Выделить всё

<?php
#Забиваем переменную русским текстом
$subject = 'Текст на русском!';
#Создаем массив с русскими буквами для поиска их в тексте
$inadmissible = array('А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ь', 'Ы', 'Ъ', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ь', 'ы', 'ъ', 'э', 'ю', 'я', ' ');
#Создаем массив с английскими буквами, которые будут заменять руские буквы
$acceptable = array('A', 'B', 'V', 'G', 'D', 'E', 'JO', 'ZH', 'Z', 'I', 'Y', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F', 'H', 'C', 'CH', 'SH', 'SCH', '', 'Y', '', 'E', 'JU', 'JA', 'a', 'b', 'v', 'g', 'd', 'e', 'jo', 'zh', 'z', 'i', 'y', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'sch', '', 'y', '', 'e', 'ju', 'ja', '_');
#Ищем и заменяем русские буквы на английские
$translate = str_replace($inadmissible, $acceptable, $subject);
#Выводим результат операции на экран
echo $translate;
?>

Результат на экране:
Tekst_na_russkom!
Реклама
lyod
Сообщения: 76

Re: Перевод русского текста в транслит

Сообщение lyod » Пн окт 20, 2014 11:46 am

Как вариант:

Код: Выделить всё

<?php
   function translate($string) {
      # Замена символов
      $replace = [
         'а' => 'a',   'б' => 'b',
         'в' => 'v',   'г' => 'g',
         'д' => 'd',   'е' => 'e',
         'ё' => 'yo',  'ж' => 'j',
         'з' => 'z',   'и' => 'i',
         'й' => 'y',   'к' => 'k',
         'л' => 'l',   'м' => 'm',
         'н' => 'n',   'о' => 'o',
         'п' => 'p',   'р' => 'r',
         'с' => 's',   'т' => 't',
         'у' => 'u',   'ф' => 'f',
         'х' => 'h',   'ц' => 'ts',
         'ч' => 'ch',  'ш' => 'sh',
         'щ' => 'sch', 'ъ' => '',
         'ы' => 'i',   'ь' => '',
         'э' => 'e',   'ю' => 'ju',
         'я' => 'ja',  ' ' => '-'
      ];
      
      # Переводим строку в нижний регистр
      $string = mb_strtolower($string, 'utf-8');
      
      # Заменяем
      $string = strtr($string, $replace);
      
      # Заменяем все лишние символы и возвращаем
      return
         preg_replace('~[^a-z\-]~', null, $string);
   }
   
   # Проверяем работу функции
   echo translate('Проверка перевода в транслит');
Аватара пользователя
Slash
Администратор
Сообщения: 2028
Поблагодарили: 62 раза

Re: Перевод русского текста в транслит

Сообщение Slash » Пн окт 20, 2014 12:18 pm

lyod, скорее всего в четвертой строке:

Код: Выделить всё

      $replace = [

должно быть так:

Код: Выделить всё

      $replace = array(

И двадцать вторая строка:

Код: Выделить всё

      ];

так:

Код: Выделить всё

      );

Иначе выходит синтаксическая ошибка...
lyod
Сообщения: 76

Re: Перевод русского текста в транслит

Сообщение lyod » Пн окт 20, 2014 10:18 pm

Да, всё верно. В версиях php старше 5.4 будет такая ошибка. А от 5.4 и моложе - можно создавать массивы с помощью []. Вот документация: http://php.net/manual/ru/language.types.array.php См. "Пример #1 Простой массив".
Аватара пользователя
Slash
Администратор
Сообщения: 2028
Поблагодарили: 62 раза

Re: Перевод русского текста в транслит

Сообщение Slash » Вт окт 21, 2014 9:17 am

У меня как раз версия php 5.5, вот я и получил синтаксическую ошибку...
Спасибо.
lyod
Сообщения: 76

Re: Перевод русского текста в транслит

Сообщение lyod » Вт окт 21, 2014 2:13 pm

У меня как раз версия php 5.5

получил синтаксическую ошибку

Странно, в 5.5 должно работать. У меня сейчас 5.4 стоит, всё срабатывает.

Вернуться в «PHP»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя