Пишем свою функцию транслитерации на PHP

Как написать свою функцию транслитерации «с чаем и поэтэссами» :).

Как написать функцию транслитерации на PHP

Пишем массив из букв, которые будут заменены. Мой список выглядит так, хотя он может местами и не полный, но принцип вы поймете.

function transliter($str, $en = false)
{
    $tr = array(
        "А"=>"A","Б"=>"B","В"=>"B","Г"=>"G",
        "Д"=>"D","Е"=>"E","Ж"=>"J","З"=>"Z","И"=>"I",
        "Й"=>"Y","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N",
        "О"=>"O","П"=>"P","Р"=>"P","С"=>"C","Т"=>"T",
        "У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",
        "Ш"=>"SH","Щ"=>"SCH","Ы"=>"YI",
        "Э"=>"E","Ю"=>"YU","Я"=>"YA","а"=>"a","б"=>"b",
        "в"=>"b","г"=>"g","д"=>"d","е"=>"e","ж"=>"j",
        "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
        "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"p",
        "с"=>"c","т"=>"t","у"=>"y","ф"=>"f","х"=>"x",
        "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch",
        "ы"=>"yi","э"=>"e","ю"=>"y","я"=>"ya"
    );
    if ($en == true) {
        $tr = array_flip($tr);
    }
    return strtr($str, $tr);
}

Используем функцию PHP strtr. Зачем нужен второй параметр? Чтобы можно было сделать реверс массива — поменять ключи со значениями, и тогда функцию будет применима и в обратную сторону, а не только с русских букв на английские. Для этого мы применяем функцию PHP array_flip.

Чтобы ее вызвать нам нужно что-то вроде:

$requsetEn = transliter(trim($arResult['query'])); // RU
$requsetRu = transliter(trim($arResult['query']), true); // EN

Как в Битриксе написать свою транслитерацию

Функцию закидываем в init.php, чтобы она была доступна из любого участка сайта. Где будем применять? Например в объявлении фильтра:

array(
	"LOGIC" => "OR",
	array('IBLOCK_ID' => 1, 'ACTIVE' => 'Y', 'NAME' => '%'.$requsetEn.'%'),
	array('IBLOCK_ID' => 1, 'ACTIVE' => 'Y', 'NAME' => '%'.$requsetRu.'%'),
),

Теперь у нас настроен поиск сразу по двум вариантам написания.
ВАЖНО Соответствия некоторых букв — не классические, поменяйте их на свои и дополните недостающими.

автор: Dmitriy

Занимаюсь веб-разработкой с 2011 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *