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

Форум для тех кто начинает осваивать язык php.
Аватара пользователя
Slash
Администратор
Сообщения: 2080
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 67 раз

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

Сообщение 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
Зарегистрирован: Пн янв 06, 2014 11:13 pm
Поблагодарили: 1 раз

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
Администратор
Сообщения: 2080
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 67 раз

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

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

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

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

		$replace = [
должно быть так:

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

		$replace = array(
И двадцать вторая строка: так: Иначе выходит синтаксическая ошибка...

lyod
Сообщения: 76
Зарегистрирован: Пн янв 06, 2014 11:13 pm
Поблагодарили: 1 раз

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

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

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

Аватара пользователя
Slash
Администратор
Сообщения: 2080
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 67 раз

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

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

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

lyod
Сообщения: 76
Зарегистрирован: Пн янв 06, 2014 11:13 pm
Поблагодарили: 1 раз

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

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

У меня как раз версия php 5.5
получил синтаксическую ошибку
Странно, в 5.5 должно работать. У меня сейчас 5.4 стоит, всё срабатывает.

Ответить Пред. темаСлед. тема

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

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