2007-04-18

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

Tema: Piece of code — Emilis @ 13: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:

setcookie('kukis', 'ąčęėįšųūž');

Po kukio informacijos nuskaitymo su JavaScript (kurios dėl vietos stokos neaprašinėsiu), gauname:

"%E0%E8%E6%EB%E1%F0%F8%FB%FE"

bandom:

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

gaunam:

àèæëáðøûþ

blogai, nes reikia:

ąčęėįšųūž

Pasukau galvą ir išsprendžiau:

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:

ąčęėįšųūž

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

6 komentarai»

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

    Komentavo: Aidas Kasparas @ 2007-04-18 13:22

  2. hmmm.

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

    neteko susidurti :) ačiū.

    Komentavo: Dominykas @ 2007-04-18 13:24

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

    Komentavo: Žilvinas @ 2007-04-18 13:53

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

    Komentavo: Emilis @ 2007-04-18 14:08

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

    Komentavo: pumba @ 2007-04-18 17:45

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

    Komentavo: Emilis @ 2007-04-18 20:00

Komentarų RSS.TrackBack URI

Palikite savo komentarą