Moin!
Geht's hingegen um irgendwas _hinter_ dem Fragezeichen, was man aus eigenen Einzelteilen zusammensetzen möchte, ist encodeURIComponent() richtig.
Ich hätte es schreiben sollen; auch das hatte ich versucht und lieferte kein Ergebnis bei der Abfrage mit Orten, die Umlaute oder Leerzeichen enthielten. Von den Dreien (encodeURI(), escape(), encodeURIComponent()) funktioniert die Abfrage nur mit escape.
Das liegt dann aber an deinem Backend, welches einfach ignoriert, dass AJAX nun mal nur mit UTF-8 arbeiten kann. Wenn du im Backend mit ISO-8859-1 arbeitest, mußt du die reinkommenden Daten logischerweise umcodieren.
Escape klappt deshalb, weil es auf ISO-8859-1-Basis codiert, d.h. ein deutscher Umlaut erhält dort die %XY-Hexdarstellung aus dem ISO-Zeichensatz - was PHP wiederum zurückführt auf den wirklichen Umlaut.
encodeURIComponent() codiert den Umlaut auf Basis von UTF-8 als zwei Bytes (%XY%YY), was PHP im ISO-8859-1-Kontext dann nicht mehr als Umlaut erkennen kann - und dein Backend logischerweise auch nicht.
Mit utf8_decode() würd's aber wieder gehen.
- Sven Rautenberg
"Love your nation - respect the others."