HighDots Forums  

decodeURIComponent() / unescape()

Javascript (German) Programmiersprache JavaScript. (de.comp.lang.javascript)


Discuss decodeURIComponent() / unescape() in the Javascript (German) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Erich Gysel
 
Posts: n/a

Default decodeURIComponent() / unescape() - 03-22-2008 , 12:51 PM






Das folgende Problem habe ich schon in einem Forum gestellt. Aber ohne
befriedigende Antwort. Vielleicht gibt es hier einen JS Spezialisten, der
das Problem kennt ?

Ich habe einen Google-Searchstring, den ich decodieren will :

ref = decodeURIComponent(document.referrer);

in document.refferer steht der String :
http://search_google.htm?q=B%FCtzi+........
Als Fehlermeldung : "malformed URI sequence". Anscheinend geht der decode
nur mit utf-8 codierten Strings. Je nachdem, woher ich den
Google-Searchstring erhalte, funktioniert das "Decoden" oder nicht. Es
betrifft die Umlaute. Google scheint nicht immer den Searchstring in
gleicher Art auszuliefern.

Verwende ich unescape(), dann wird obiger Fall richtig. Man sollte aber
angeblich unescape() nicht mehr verwenden. Wie verwende ich aber beide
zusammen, dass alle Fälle abgedeckt werden.

Reicht es eurer Meinung nach, wenn ich :

if (indexOf("%")) == -1) decodeURIComponent(....)
else unescape(....)

verwende ? Oder gäbe es eine andere Möglichkeit ?

Besten Dank für einen Tip.
Gruss Erich



Reply With Quote
  #2  
Old   
Erich Gysel
 
Posts: n/a

Default Re: decodeURIComponent() / unescape() - 03-23-2008 , 05:44 AM






Quote:
Da decodeURIComponent einen Fehler wirft, dürfte wohl eine
Try-Catch-Lösung angebracht sein:
In meinem "schlauen" JS-Buch steht, dass das "exeption handling" nur mit
neueren Browsern funktioniert. Was das heissen mag, ist mir unklar. Ist der
weitverbreitete IE6 ein neuerer ? Der NN7.1 ? etc.

Bei meiner Anfrage in dem erwähnten Forum erhielt ich folgende Antwort :
Zitat ---->Wenn das nicht der Fall ist sollte ein GET-Parameter namens ie,
das steht für input encoding, gesetzt sein. Z.B. ie=iso-8859-1. Je nachdem,
ob und wie dieser Parameter gesetzt ist, musst du decodeURIComponent (bei
leerem ie oder ie=utf- oder unescape (bei ie=iso-8859-1) zum Dekodierung der
Zeichen benutzen. Hundertprozentig zuverlässig funktioniert das natürlich
nicht. ---->Zitatende

Mit dieser Aussage konnte ich gar nichts anfangen. Eine Rückfrage ergab
keine Antwort.

Gruss
Erich




Reply With Quote
  #3  
Old   
Ralph 'rkhb' Bauer
 
Posts: n/a

Default Re: decodeURIComponent() / unescape() - 03-23-2008 , 06:23 AM



Erich Gysel schrieb:
Quote:
Da decodeURIComponent einen Fehler wirft, dürfte wohl eine
Try-Catch-Lösung angebracht sein:

In meinem "schlauen" JS-Buch steht, dass das "exeption handling" nur
mit neueren Browsern funktioniert. Was das heissen mag, ist mir
unklar. Ist der weitverbreitete IE6 ein neuerer ? Der NN7.1 ? etc.
Nun, vielleicht ist Dein schlaues Buch schon älter. Heutzutage würde ich
"neuerer" mit "gängig" ersetzen. Try-Catch wurde mit Javascript 1.4
eingeführt, das von Netscape vor 10 Jahren vorgestellt wurde. Laut
Microsoft, müsste es auch schon im IE5.0 vorhanden sein:

http://msdn2.microsoft.com/en-us/lib...wz(VS.85).aspx

Ich habe Dir ein vollständiges Dokument gepostet, damit Du es ohne viel
Aufwand in allen möglichen Browser testen kannst. Bei mir funktioniert es in
IE6, FF2.0.0.12, NN7.0, Opera7.54, Opera9.21, Mozilla1.3, Safari 3.0.4 auf
WinXP. Mehr Browser und Betriebssysteme zu testen, habe ich jetzt keine
Lust.

Quote:
Bei meiner Anfrage in dem erwähnten Forum erhielt ich folgende
Antwort : Zitat ---->Wenn das nicht der Fall ist sollte ein
GET-Parameter namens ie, das steht für input encoding, gesetzt sein.
Z.B. ie=iso-8859-1. Je nachdem, ob und wie dieser Parameter gesetzt
ist, musst du decodeURIComponent (bei leerem ie oder ie=utf- oder
unescape (bei ie=iso-8859-1) zum Dekodierung der Zeichen benutzen.
Hundertprozentig zuverlässig funktioniert das natürlich nicht.
---->Zitatende
Mit dieser Aussage konnte ich gar nichts anfangen. Eine Rückfrage
ergab keine Antwort.
Ein Beispiel aus einem meiner Apache-Logs:

....search?q=...&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:defficial&client=firefo x-a

Aber "ie=..." ist nicht immer vorhanden. Folgende Funktion zeigt die
Extraktion
von ie:

function getQueries(Ref)
{ var obj=new Object;
var pos=Ref.indexOf('?')
if (pos)
{ var query = Ref.substr (++pos).split('&');
for (q in query)
{ tok = query[q].split('=');
obj[tok[0]]=tok[1];
}
}
return getQueries
}

Nun kannst Du den Wert von ie wie in einem assoziativen Array abfragen:

var obj = getQueries('q=...&ie=utf-8&oe=utf-8&aq=t');
if (obj['ie']) alert (obj['ie']); else alert ('ie nicht vorhanden');

viele grüße
ralph



Reply With Quote
  #4  
Old   
Erich Gysel
 
Posts: n/a

Default Re: decodeURIComponent() / unescape() - 03-23-2008 , 07:00 AM



@Ralph

ganz herzlichen Dank für deine umfangreichen Ausführungen. Die Ostertage
sind gerettet ! Ich werde mich dem Thema annehmen.

Zur Ergänzung noch : decodeURIComponent funktioniert mit dem angegebenen
Beispiel im IE7, weil sich MS mal wieder nicht an den ECMA-Standard hält. In
diesem Fall zu meinen Gunsten. FF hält sich daran, darum geht's nicht.

Ich wünsche dir schöne Feiertage
Es grüsst dich
Erich



Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.