Сегодня хочу предложить решение задачи, которая периодически встает перед программистами которые занимаются созданием русскоязычных ресурсов, а именно вопросу транслитерации кириллических символов в латиницу.
Итак, как и всегда :) рабочая заготовка:


function translit($cyr_str) {
$tr = array(
"Ґ"=>"G","Ё"=>"YO","Є"=>"E","Ї"=>"YI","І"=>"I",
"і"=>"i","ґ"=>"g","ё"=>"yo","№"=>"#","є"=>"e",
"ї"=>"yi","А"=>"A","Б"=>"B","В"=>"V","Г"=>"G",
"Д"=>"D","Е"=>"E","Ж"=>"ZH","З"=>"Z","И"=>"I",
"Й"=>"Y","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N",
"О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T",
"У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",
"Ш"=>"SH","Щ"=>"SCH","Ъ"=>"'","Ы"=>"YI","Ь"=>"",
"Э"=>"E","Ю"=>"YU","Я"=>"YA","а"=>"a","б"=>"b",
"в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"zh",
"з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
"м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
"с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
"ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"'",
"ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya"
);
return strtr($cyr_str,$tr);
}

Это тривиальное, но вместе с тем в большинстве случаев приемлимое решение, построено на использовании функции PHP strtr, которая в качестве первого параметра принимает исходную строку в кириллице и делает в ней множественную замену из массива подстановок.

Как нетрудно догадаться основой всего является именно массив подстановок символов, в котором и прописаны соответствия кириллицы и латиницы.


Хотелось бы отметить, что реализовывать по данному принципу полный цикл, т.е. прямое преобразование в латиницу, а затем обратное преобразование в кириллицу не представляется возможным из-за неоднозначной трактовки символов. Поэтому если есть необходимость, например при построении ЧПУ для сайта, где в url естественно должны быть прописаны латинские символы, то нужно сохранять, например в отдельном поле БД, транслитерированный вариант соответствующего url, а затем производить поиск соответствия в таблице по этому полю.

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Понравился пост подпишись по RSS 

3 ответов в “Транслитерация. Реализация на PHP.”
  1. wmas ответил:

    hi! Похоже, получился небольшой глюк в верстке с “правым уголком” (знак больше или как его ещё обозвать). Но это так… В транслитерации самым забавным, на мой взгляд, является попытка обратного преобразования :)

  2. admin ответил:

    wmas
    Да, слона то я и не приметил, ща подправлю.
    По поводу обратного преобразования: в принципе это видимо возможно, но это требует уникальной комбинации для каждого символа в прямом преобразовании, чего достаточно сложно достичь :)

  3. Holy Diver ответил:

    Да, strtr крутая функция и отлично подходит для транслитерации. Но не советую работать с буквами верхнего регистра по принципу Я => YA. В результате получится YAbloko, вторая заглавная A ни к месту. Куда лучше заранее переводить всё в нижний регистр.

Оставить комментарий