Скрипт транслитерации
В CMS LiveTree, разработанном нами от начала и до конца (точнее, за исключением используемого в нём бесплатного скрипта FCKeditor, легко, впрочем, заменяемого на любой другой онлайн-редактор), до недавних пор был вот какой недочёт: Хотелось, чтобы, скажем, страница «Реклама» имела адрес http://hostname.zоnе/reklama.htm; более того, неплохо и для под-разделов сделать /reklama/v_gazete/zakaz.htm и /reklama/na_sayte/zakaz.htm Технически это реализуется относительно просто. Вот только вопрос: na_sayte, na_saite или na_saytye? Для того, чтобы не отягощать CMS дополнительными полями (напомним, в LiveTree главный упор делается на простоту управления и наращивания), требовалась такая транслитерация, которая была бы по возможности 100%-обратимой. То есть, чтобы транслитерированное слово можно было "де-транслитерировать" обратно в кириллицу и получить в точности исходный текст. Кстати, требование обратимости полностью устраняет варианты таких разночтений, как классическое "Паша празднует Пасху".
и это бы ещё ладно - с учётом отсутствия в русском языке буквосочетаний «зх». (Если кто-то, начитавшись интернет-писанины, думает, что в нашем языке существует, к примеру, слово «безхозный», то RTFM учебник русского языка). Впрочем, не будем забывать про аббревиатуры, в которых сочетания могут быть любыми.
Тут и вполне правильно написанное слово «бесхозный» после двойной транслитерации превратится в «бешозный», а «веснушчатые» станут «веснущатыми». Всё же, для тех, кому эта таблица транслитерации для чего-то необходима, приводим её целиком:а - a б - b в - v г - g д - d е - e ё - yo ж - zh з - z и - i й - j к - k л - l м - m н - n о - о п - p р - r с - s т - t у - u ф - f х - h ц - c ч - ch ш - sh щ-shch ъ - ' ы - y ь - ._ э - e- ю - yu я - ya
В итоге, было принято нелёгкое решение: транслитерация URL по собственной таблице. Нелёгким оно было даже не в силу технической или лингвистической сложности, но уже потому, что ужасно не хочется плодить новые стандарты. Поэтому, изобретя велосипед, мы выкладываем исходники разработанной пары функций rus2lat и lat2rus на наиболее популярном языке PHP.
А выкладываем мы его, чтобы попросить тех, кому данный скрипт оказался полезен, но кто решил его модернизировать: не жадничайте, как и мы не пожадничали. Сообщите нам, какие улучшения Вам удалось внести в данный скрипт - и мы выложим его улучшенную версию здесь же.
UPD от 2008-03-02: Андрей Орлов, инженер компании DreamBot, подсказал ссылку на ГОСТ 7.79-2000 Правил транслитерации кирилловского письма латинским алфавитом, принятых Межгосударственным Советом по стандартизации, метрологии и сертификации и Госстандартом России. Система Б этих Правил оказалась действительно полностью обратимой, единственное только - пришлось её чуть-чуть доработать, устранив несовместимый со стандартами URL апостроф. Результат, как и обещали, выкладываем: // Disclaimer: Скрипт принципиально не сохраняет регистр! Кириллица принудительно переводится в нижний, латиница - в верхний. // Это связано с необходимостью корректной транслитерации двуязычных названий страниц. // Если у кого есть идеи, как обойти эту проблему - welcome! Форма отправки месага на форум - внизу. // Регистрация не требуется. // Использованная локале-независимая функция UpLow($s) function UpLow(&$string,$registr='up'){ $lower = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюяabcdefghijklmnopqrstuvwxyz'; if($registr == 'up') $string = strtr($string,$lower,$upper); } //function UpLow(&$string,$registr='up')
$s=str_replace("ЫА","yha",$s);
|
|||||||
|