Transliterace azbuky
Především pro účely použití v URL se ve webových aplikacích odstraňuje z některých textů diakritika. S využitím rozšíření Iconv to lze pro latinku zajistit automaticky, s jinými abecedami si toto rozšíření ale neporadí.
Např. pro azbuku existuje hned několik přepisů do latinky, pro URL je nejšikovnější asi GOST 16876-71.
<?php /** Převod azbuky na latinku podle GOST 16876-71 * @param string text v azbuce * @return string text v latince * @copyright Jakub Vrána, https://php.vrana.cz/ */ function azbuka_latinka($s) { return strtr($s, array( 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'jo', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'jj', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'kh', 'ц' => 'c', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'shh', 'ъ' => '', 'ы' => 'y', 'ь' => '', 'э' => 'eh', 'ю' => 'ju', 'я' => 'ja', 'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'JO', 'Ж' => 'ZH', 'З' => 'Z', 'И' => 'I', 'Й' => 'JJ', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'KH', 'Ц' => 'C', 'Ч' => 'CH', 'Ш' => 'SH', 'Щ' => 'SHH', 'Ъ' => '', 'Ы' => 'Y', 'Ь' => '', 'Э' => 'EH', 'Ю' => 'JU', 'Я' => 'JA', )); } ?>
Výsledek této funkce lze předat funkci friendly_url
. Všimněte si, že např. znaky а
a a
vypadají ve většině fontů stejně, ale každý má v tabulce Unicode jiné místo.
Do latinky se dají převést např. i čínské znaky, tam by se mi ale převodní funkci konstruovat nechtělo a raději bych znaky vložil do URL přímo a použil funkci urlencode stejně jako to dělá např. Wikipedia.
Diskuse
iyo:
Osobne by som to zosekal na užšie riadky - takto sa to aj blbo pozera aj v kode by to nebolo práve najčitateľnejšie...Martin Kopta:
Ahoj, Kubo, jazykovědci používají dva termíny: transliterace a transkripce. To, co ukazuješ na azbuce je spíš transkripce, a to do angličtiny.
Takže když volíš transkripci azbuky pro URL, měl bys zvážit, pro koho ji vlastně děláš -- a pak zjistíš, že nejspíš pro nikoho a zůstaneš u urlencode. ;-)
Jakub Vrána
:
Dovolil bych si nesouhlasit. Podle http://en.wikipedia.org/wiki/Transliteration#…_transcription se transkripce soustředí na zvukovou podobu a transliterace na přepis samotných písmen. Neboli pro transkripci může být důležitá celá podoba slova, což tato jednoduchá funkce samozřejmě nezohledňuje. Navíc konkrétně GOST 16876-71 je uveden jako „romanization system (for transliteration of Cyrillic texts into the Latin alphabet)“.


Pavel Šindelka:
Vzpomínám si, jak jsme se o tomhle problému bavili při obědě na WebCampu - a vypadá to, že jsme došli k podobnému řešení :) Každopádně užitečné info pro všechny, kteří chtějí automaticky generovat hezká URL i v ruské verzi stránek.
Martin:
Prohlížeče se poslední dobou KONEČNĚ naučily zobrazovat pěkné url samy a už se jim nemusí pomáhat. Vyhledávače se taky vzpamatovaly (kromě amatérů se Seznamu, kteří neumí ani IDN). Takže pomalu nic nebrání tomu, dělat to jako Wikipedia. IE 7, Firefox 3 a Google to zvládnou. Další se to snad taky naučí. V budoucnu snad i pan Lukašenko v Seznamu.Jan Tvrdík:
Jen doplním, že to zvládne i Opera. Dokonce i Firefox 2, akorát je třeba v about:config přepnout:
network.standard-url.encode-utf8 : true
network.standard-url.escape-utf8 : false
qwe:
Toto je skutečně převod do angličtiny. Např. ч se do češtiny přepisuje jako "č" nikoli jako "ch" (např. Чуйков se do češtiny přepisuje jako Čujkov, nikoli Chujkov - lepsi URL bude "cujkov" než "chujjkov" podle vašeho převodníku). Podobně "х" je "ch" nikoli "kh". Podobně u písmen "š", "ž", "šč", "e", " atd.Budu-li mít českou stranku se životopisem Žukova, bude lepší URL "zukov" než "zhukov". Podobně třeba radsi "chruscov" nez "khruschev".
Juraj:
V prípade, že budete mať českú stránku so životopisom Žukova v češtine, tak na vytvorenie URL použijete funkciu friendly_url na ktorú je odkaz v článku, pretože budete vytvárať URL z latinky.V prípade, že budete mať stránku so životopisom pána maršála v ruštine použiteje funkciu z tohto článku, t.j. url bude správne "zhukov".
Skřetík:
Otázka ovšem je, zda tohle "friendly" URL ve výsledku vůbec je k něčemu dobré. Na .cz stránkách najdete /kontakt, na .en najdete /contact a když se podíváte na .ru stránky, obvykle tam místo pokusů o transkripci nebo transliteraci najdete alias v angličtině. Já se jim ani nedivím, do latinky to totiž můžete přepsat tak aby to stejně znělo nebo vypadalo ale smysl už to dávat nebude.Jožko:
nebola by ovela lepsia tato forma ? :static $cp852_to_utf8 = array(
"\x80" => "\xC3\x87", // #LATIN CAPITAL LETTER C WITH CEDILLA
"\x81" => "\xC3\xBC", // #LATIN SMALL LETTER U WITH DIAERESIS
"\x82" => "\xC3\xA9", // #LATIN SMALL LETTER E WITH ACUTE
"\x83" => "\xC3\xA2", // #LATIN SMALL LETTER A WITH CIRCUMFLEX
pretoze staci jeden menej sikovny textovy editor alebo zle nastavene kodovanie cohokolvek ...
Jakub Vrána
:
Já mám za to, že ne. Funkci bych musel připravit pro více různých kódování. Takhle si ji každý vloží v tom kódování, které používá. O menší zřetelnosti nemluvě.


richard barborik:
To je sice všechno moc hezké ale ja jsem amater a nevim skoro nic.Krom toho je všude pouze přepis z azbuky ale ne do azbuky ja se ji učím na škole a potřebuji překlad nemužu slovo od slova hledat na intenetu a kopirovar jeVhxsoft@gmail.com:
JAK TO VYLÚŠTIM ??STAČÍ PREVIESŤ ZNAKY DO AZBUKY ALE VO WINDOWSE TO NEVIEM
Îáůčňĺëüíŕ˙, âĺń¸ëŕ˙, ńčěďŕňč÷íŕ˙ äĺâóřęŕ )) Ëţáëţ ňŕíöű, íîâűĺ çíŕęîěńňâŕ.. Íĺ ďđîňčâ ńĺęńŕ áĺç îá˙çŕňĺëüńňâ ;) Ěîč ôîňęč č ŕíęĺňŕ ňóň: http://sweet-sex.ru P.S. Ëţáëţ äĺâńňâĺííčęîâ)
PORADÍ NIEKTO ?
xxx:
taky mi to samé přišlo na icq, je to spam na jakési ruské webovky, to ani neřeš, ale taky se mi to přeložit nepovedlo a nechce se mi to překládat ručněمم你好لكة الأسرة:
你好jednoduše.
Text zkopíruj a ulož ho tak jak je (v kodovani cp 1250)
Potom v totalcommanderu dej Lister a kodovaní cyrilice (cp1251)
PS: Píše se tam něco o pěkné holce
ممПрочти свой любовный لكة الأسرة:
nebo toto$out=iconv("cp1251","utf-8",iconv("utf-8","cp1250",$in));
Diskuse je zrušena z důvodu spamu.

