Разработка плагинов, модулей и скриптов > Полезный PHP код > Функция фильтр ложной кириллицы

Функция фильтр ложной кириллицы

Функция PHP фильтр ложной кириллицы убирает ложную кириллицу из текста. Ложную кириллицу часто используют для уникализации текстов, поэтому парсер часто может наткнуться на подобные "грязные" тексты, которые вручную очистить очень трудно. Функция очищает текст от ложной кириллицы, при этом обычно не трогает слова на английском языке - считает, что ложной кириллицей являются не все латинские символы, а лишь те которые рядом без пробела с кирилличными.

Собственно код состоит из 2-х функций, одна из которых - служебнаяя callback функция. Также для работы функция определяет глобальную переменную $__fauxCyrCharsReplaced, анализируя которую, можно узнать, сколько символов ложной кириллицы было заменено на настоящие.

 

Пример использования:

echo cleanup_faux_cyr( 'Текcт с лoжной kириллицeй' );

 

/*
Фильтр ложной кириллицы
Автор: http://trickywebs.org.ua/
*/
function cleanup_faux_cyr( $text ) {
	global $__fauxCyrCharsReplaced;

	$__fauxCyrCharsReplaced = 0;
	
	$exprSuffix = '/([а-яА-Я])([a-zA-Z0-9]{1})/u';
	$text = preg_replace_callback( $exprSuffix, '__clbk_cleanup_faux_cyr', $text );

	$exprPrefix = '/([a-zA-Z0-9]{1})([а-яА-Я])/u';
	$text = preg_replace_callback( $exprPrefix, '__clbk_cleanup_faux_cyr', $text );

	return $text;

}


function __clbk_cleanup_faux_cyr( $text ) {
	global $__fauxCyrCharsReplaced;

	$fauxCyr = array(
		'a' => 'а',
		'A' => 'А',
		'c' => 'с',
		'C' => 'С',
		'e' => 'е',
		'E' => 'Е',
		'T' => 'Т',
		'H' => 'Н',
		'o' => 'о',
		'O' => 'О',    
		'p' => 'р',
		'P' => 'Р',
		'k' => 'к',
		'K' => 'К',
		'x' => 'х',
		'X' => 'Х',
		'B' => 'В',
		'M' => 'М',
		'b' => 'ь',
		'r' => 'г',
		'y' => 'у',
		'Y' => 'У',
		'0' => 'О',
		'1' => 'І',
		'i' => 'і',
	);

 	if( isset( $fauxCyr[$text[1]] ) ) {
 		$replace = $fauxCyr[$text[1]].$text[2];
 		$__fauxCyrCharsReplaced++;
 	} elseif( isset( $fauxCyr[$text[2]] ) ) {
 		$replace = $text[1].$fauxCyr[$text[2]];
 		$__fauxCyrCharsReplaced++;
 	} else
		$replace = $text[0];
	
	return $replace;
}