Kaip išlupti lietuviškas raides iš sausainiukų su JavaScript

2007-04-18 16:02

Kas dar nesupratot, čia įrašas kolegoms programuotojams :-)

Turėjau tokią problemą: reikėjo su JS pasiimti lietuvišką windows-1257 koduotą tekstą iš cookie. Problema tame, kad nuskaitant informaciją iš kukio su JS, vietoj lietuviškų raidžių atsiranda encodinti stringai.

Pavyzdys: PHP kode padarome: break setcookie('kukis', 'ąčęėįšųūž');

Po kukio informacijos nuskaitymo su JavaScript (kurios dėl vietos stokos neaprašinėsiu), gauname: break "%E0%E8%E6%EB%E1%F0%F8%FB%FE"

bandom: break unescape("%E0%E8%E6%EB%E1%F0%F8%FB%FE")

gaunam:

break àèæëáðøûþ

blogai, nes reikia:

break ąčęėįšųūž

Pasukau galvą ir išsprendžiau:

```break function fix_lt_chars(str) { var lt_from = Array(‘%E0’, ‘%E8’, ‘%E6’, ‘%EB’, ‘%E1’, ‘%F0’, ‘%F8’, ‘%FB’, ‘%FE’, ‘%C0’, ‘%C8’, ‘%C6’, ‘%CB’, ‘%C1’, ‘%D0’, ‘%D8’, ‘%DB’, ‘%DE’); var lt_to = Array(‘%u0105’, ‘%u010D’, ‘%u0119’, ‘%u0117’, ‘%u012F’, ‘%u0161’, ‘%u0173’, ‘%u016B’, ‘%u017E’, ‘%u0104’, ‘%u010C’, ‘%u0118’, ‘%u0116’, ‘%u012E’, ‘%u0160’, ‘%u0172’, ‘%u016A’, ‘%u017D’);

l = lt_from.length;
for (i=0;i < l; i++)
{
    str = str.replace(lt_from[i], lt_to[i]);
}

return str; }

gera_reiksme = unescape(fix_lt_chars(“%E0%E8%E6%EB%E1%F0%F8%FB%FE”)); ```

gaunam:

break ąčęėįšųūž

Sprendimas bjaurus, bet ką daryti, kai tas kukis viena esminių sistemos dalių, kurios neišeina pakeisti ;-).

Komentarai

Aidas Kasparas

A kas kaltas, kad kukis nustatomas windows-1257 koduotėje, o tu nori unicode? Jei js turi iconv'ą, siūlyčiau naudoti. Nes dar kas nors rusiškai parašys, tai bus apskritai batai.

Dominykas

hmmm.

net jeigu peidžas utf, vistiek setcookie įrašo cp1257?

neteko susidurti :) ačiū.

Žilvinas

Yra kitas sprendimas, ir standartinis ;-). encodeURIComponent() užkoduoja labai gražiai ir utfinius stringus. Problema iškyla tik tame kad tekste negali būti + ženklo, nes jis traktuojamas kaip tarpas, todėl prieš darant encodeURIComponent() reikėtu dar su javascript'u praleisti regexpa ir pakeisti + ženklus jų šešioliktaine išraiška. cheers ;)

Emilis

Kolegos, apie utf/unicode jūs kažką ne taip supratot.

Nėra jokio unicode. Viskas vyksta po win1257. Ir set'inimas ir get'inimas po 1257. Problema tame, kad JS kažkaip sugeba užignoruoti tą 1257 ir išvedant kukio turinį vaizduoja lyg būtų plain ascii puslapio koduotė.

Rusiškas tekstas neaktualu, nes kukyje būna tik lietuviškas tekstas.

pumba

nu tai o nafig win1257? tame ir beda, kad ner unikodo

Emilis

pumba> tofig, kad sistema legacy. Būtų visai laisvos rankos, 1257 ten greitai neliktų.

Komentuoti šio įrašo nebegalima. Komentarų sistema išjungta.