rus2lat — php функция для транслитерации
Довольно распространенная тема, когда нужна написать сделать транслитерацию текста с русских букв на английские. В сети решений много, но большинство из них монстрообразные с какими-то непонятными массивами.
Собственно, сама функция:
1 2 3 4 5 6 7 8 9 10 | function rus2lat($string) { $rus = array('ё', 'ж', 'ц', 'ч', 'ш', 'щ', 'ю', 'я', 'Ё', 'Ж', 'Ц', 'Ч', 'Ш', 'Щ', 'Ю', 'Я'); $lat = array('yo', 'zh', 'tc', 'ch', 'sh', 'sh', 'yu', 'ya', 'YO', 'ZH', 'TC', 'CH', 'SH', 'SH', 'YU', 'YA'); $string = str_replace($rus, $lat, $string); $string = strtr($string, "АБВГДЕЗИЙКЛМНОПРСТУФХЪЫЬЭабвгдезийклмнопрстуфхъыьэ", "ABVGDEZIJKLMNOPRSTUFH_I_Eabvgdezijklmnoprstufh_i_e"); return ($string); } |
Однако, функция strstr не работает с мультибайтовыми кодировками, такими как UTF-8. Вот реализация для mb_string функций:
1 2 3 4 5 6 7 | function mb_strtr($str, $from, $to) { return str_replace(mb_str_split($from), mb_str_split($to), $str); } function mb_str_split($str) { return preg_split('~~u', $str, null, PREG_SPLIT_NO_EMPTY); } |
В функции rus2lat заменяем strstr на mb_strstr и радуемся простому, но эффективному решению.