ďťż

[javascript] escape() i PL znaki (chcę ISO a nie unicode)

       

Podstrony


telcocafe

Hejka!

Ostatnio ogarnęła mnie mania "bookmarkletowania" - nadodawałem gotowych i natworzyłem sobie własnych "skryptozakładek" na każdą okazję, w tym parę służących m.in. do wyszukiwania zaznaczonego słowa - np. w słowniku dict.pl
I mam mały problem - np. zamiast słowo "łóżko" zakodować w URLu jako "%B3%F3%BFko" dostaję:
escape(): "%u 0 1 4 2% F 3 % u 0 1 7 C k o" (tylko bez spacji - dodałem, bo wyświetlało tutaj nie kody liter unicode, tylko prawidłowe literki)
encodeURI(): "%C5%82%C3%B3%C5%BCko"

Jeszcze podam przykład bookmarkleta:
(Używam głównie Firefoxa i wiem, że w takim razie mógłbym pominąć poniżej parę if'ów...)

java script:( function() { function getSearchString (promptString) { s = null; if(document.selection && document.selection.createRange) { s = document.selection.createRange().text; } else if (document.getSelection) { s = document.getSelection(); if(! (s && s.length)) { if(frames.length>1) { for(i=0;i<frames.length;i++) { s=frames[i].document.getSelection(); if(s) break; } } } } if(! (s && s.length)) { s = prompt(promptString,''); } return s; } searchString = getSearchString('Podaj słowo (EN lub PL) do sprawdzenia w słowniku (lub zaznacz słowo przed użyciem bookmarleta)'); if(searchString != null) { if(searchString.length) { location = 'http://www.dict.pl/plen?word='+escape(searchString); } else { location = 'http://www.dict.pl'; } } } )();

A więc:
czy jest jakaś gotowa funkcja, która zrobi prawidłowo "URLencoding", czy muszę sam zdefiniować/znaleźć taką funkcję, (tj. chyba szybciej już będzie przepuścić wynik escape() przez jakieś RegExpy)?

Pozdrawiam,
Mirek

PS: Jakby ktoś chciał dodać sobie powyższego bookmarkleta (tylko nie w IE6), to musi przerobić tak, żeby był w jednej linijce - tu rozbiłem dla przejrzystości - no i usunąć spację z początkowego słowa "java_script"
Albo skopiować stąd (tylko też bez spacji w 1. słowie):
java script:(function(){ function getSearchString (promptString) { s = null; if(document.selection && document.selection.createRange) { s = document.selection.createRange().text; } else if(document.getSelection) { s = document.getSelection(); if(! (s && s.length)) {if(frames.length>1){for(i=0;i<frames.length;i++){s=frames[i].document. getSelection();if(s)break;}}} } if(! (s && s.length)) { s = prompt(promptString,''); } return s; } searchString = getSearchString('Podaj słowo (EN lub PL) do sprawdzenia w słowniku (lub zaznacz słowo przed użyciem bookmarleta)'); if(searchString != null) { if(searchString.length) { location = 'http://www.dict.pl/plen?word='+escape(searchString); } else { location = 'http://www.dict.pl'; } } })();

--------- Edit: ---------
Na razie zamieniłem poprostu:
escape(searchString) // -- na -- escape(searchString).replace(/\x25u0105/g, '\x25B1').replace(/\x25u0107/g, '\x25E6').replace(/\x25u0119/g, '\x25EA').replace(/\x25u0142/g, '\x25B3').replace(/\x25u0144/g, '\x25F1').replace(/\x25u015B/g, '\x25B6').replace(/\x25u017A/g, '\x25BC').replace(/\x25u017C/g, '\x25BF').replace(/\x2520/g, '+').replace(/\x25u0104/g, '\x25A1').replace(/\x25u0106/g, '\x25C6').replace(/\x25u0118/g, '\x25CA').replace(/\x25u0141/g, '\x25A3').replace(/\x25u0143/g, '\x25D1').replace(/\x25u015A/g, '\x25A6').replace(/\x25u0179/g, '\x25AC').replace(/\x25u017B/g, '\x25AF') // we wzorcu (ale nie w podstawianej w zamian wartości) zamiast \x25 można użyć znak % - ale wtedy na forum wyświetlają się prawidłowe literki, a nie ich kody - ale nadal chętnie poznam f-cję, która robi to sama - jeśli tylko takowa istnieje...
Użytkownik Orlin edytował ten post 04 styczeń 2007, 19:43
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.