Transliterace azbuky

Školení, která pořádám

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.

Jakub Vrána, Řešení problému, 10.6.2008, diskuse: 16 (nové: 0)

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. ;-)

ikona Jakub Vrána OpenID:

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 ...

ikona Jakub Vrána OpenID:

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 je

Vhxsoft@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));

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2017 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.