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.
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...
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. ;-)
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)“.
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.
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 ...
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));
Diskuse je zrušena z důvodu spamu.