Для транслитерации в Битрикс используется метод Cutil::translit($str, $lang, $params = array())
Функция транслитерирует строку $str с языка $lang с параметрами $params
Массив $params
Параметр | Значение по умолчанию | Описание |
---|---|---|
"max_len" | 100 | Максимальная длина результата транслитерации |
"change_case" | L | Приведение результата к регистру, L - к нижнему, U - верхнему |
"replace_space" | _ | Замена для символа пробела |
"replace_other" | _ | Замена для прочих символов |
"delete_repeat_replace" | true | Удалять лишние символы замены |
safe_chars | " | Символы которые не нужно транслитерировать |
use_google | false | Новый, пока не используется |
Пример использования
$str = "Текст для транслитерации";
$params = array("replace_space"=>"-","replace_other"=>"-");
$result = Cutil::translit($str, "ru", $params);
echo $result;
Иногда, этот метод не работает (в нем есть ошибка, которая проявляется на UTF-8 сайтах)
В таком случае есть 2 пути:
1. Исправить код метода(это риск потерять изменения при обновлении битрикса):
сам метод находится в файле /bitrix/modules/main/tools.php:
Нужно в нем заменить строчку:
$chr = substr($str, $i, 1);
На:
$chr = mb_substr($str, $i, 1, 'UTF-8');
2. Использовать для транслитерации свою функцию:
Как пример можно взять следующий код;
class Translit
{
function Transliterate($string)
{
$cyr = array(
"Щ", "Ш", "Ч", "Ц","Ю", "Я", "Ж", "А","Б","В","Г","Д","Е","Ё","З","И","Й","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Х", "Ь","Ы","Ъ","Э","Є","Ї",
"щ", "ш", "ч", "ц","ю", "я", "ж", "а","б","в","г","д","е","ё","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х", "ь","ы","ъ","э","є","ї"
);
$lat = array(
"Shh","Sh","Ch","C","Ju","Ja","Zh","A","B","V","G","D","Je","Jo","Z","I","J","K","L","M","N","O","P","R","S","T","U","F","Kh","'","Y","`","E","Je","Ji",
"shh","sh","ch","c","ju","ja","zh","a","b","v","g","d","je","jo","z","i","j","k","l","m","n","o","p","r","s","t","u","f","kh","'","y","`","e","je","ji"
);
for ($i=0; $i < count($cyr); $i++)
{
$c_cyr = $cyr[$i];
$c_lat = $lat[$i];
$string = str_replace($c_cyr, $c_lat, $string);
}
$string = preg_replace("/([qwrtpsdfghklzxcvbnmQWRTPSDFGHKLZXCVBNM]+)[jJ]e/", "\${1}e", $string);
$string = preg_replace("/([qwrtpsdfghklzxcvbnmQWRTPSDFGHKLZXCVBNM]+)[jJ]/", "\${1}'", $string);
$string = preg_replace("/([eyuioaEYUIOA]+)[Kk]h/", "\${1}h", $string);
$string = preg_replace("/^kh/", "h", $string);
$string = preg_replace("/^Kh/", "H", $string);
return $string;
}
function UrlTranslit($string)
{
$string = preg_replace("/[_\s\.,?!\[\](){}]+/", "-", $string);
$string = preg_replace("/-{2,}/", "--", $string);
$string = preg_replace("/_-+_/", "--", $string);
$string = preg_replace("/[_\-]+$/", "", $string);
$string = Translit::Transliterate($string);
$string = ToLower($string);
$string = preg_replace("/j{2,}/", "j", $string);
$string = preg_replace("/[^0-9a-z_\-]+/", "-", $string);
return $string;
}
}
$trans = Translit::UrlTranslit("бла бла бла 123");
echo $trans;
Теги - Bitrix