Moin!
Lieber Sven,
Mit utf8_decode() würd's aber wieder gehen.
Das war das, was mir wohl fehlte! ich hatte es nur kurz mit urldecode in einer Kombination proboert - ohne Erfolg...
Ich habe nun drei Sachen geändert. Die JS Anfrage kodiere ich, wie Du es vorgeschlagen hast, mit encodeURIComponent. Im PHP-Script kodiere ich "zurück": utf8_decode( ... )
und die Ausgabe des PHP-Scripts kodiere ich wiederum mit utf8-encode() und "übergebe" sie dem JS (responseText). Muss ich dann eigentlich wieder decodieren? ;-)
HTML und Javascript arbeiten standardmäßig intern sowieso mit dem gesamten Unicode-Zeichenbereich. An den Schnittstellen zur Außenwelt (also Requests vom Server) wird durch das HTTP-Protokoll, ersatzweise auch durch ein Meta-Tag (wobei es das nicht in allen "Sprachen" gibt), mitgeteilt, wie die übermittelten Bytes zu verstehen sind, und direkt vom Browser in das interne Unicode-Format gewandelt.
Insofern: Wenn du UTF-8 sendest und das dem Browser mitteilst, dann weiß er alles, was er wissen muß.
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.
Ist das nicht gerade der Vorteil schlecht hin? Stell ich an das PHP-Script nun direkt eine Anfrage (?orte=<ortsname>), funktioniert diese zwar mit Opera aber im FF nicht. Opera macht bspw aus köln k%C3%B6ln (das ist nach Deiner Beschreibung ja utf-8); Firefox lediglich k%F6ln (das ist dann wohl ISO-8859-1-Basis). Dies wird sicher an meinen jeweiligen Browsereinstellungen liegen, führt aber in einem Fall zu einem Ergebnis im anderen nicht und das ist ja eher unerwünscht. Kann ich die Codierung der Parameter erkennen und entsprechend handeln? Oder habe ich irgendwo was mißverstanden?
ISO-8859-1 ist kein Vorteil. Im Gegenteil wird es immer mehr zum Nachteil, denn damit kannst du ja nur 256 verschiedene Zeichen codieren. Das sind zwar fast alle, die im westeuropäischen Kulturkreis benutzt werden - aber das muß ja nicht zwingend ausreichen. Es scheitert schon beim Eurozeichen, was in ISO-8859-1 nicht codiert werden kann, weil's dort schlicht nicht enthalten ist.
Es gibt auch angesichts der in der Realität auftauchenden Browser keinen Grund mehr, nicht UTF-8 einzusetzen. Die Unterstützung dafür wird immer besser, auch in den diversen Open-Source-Produkten.
- Sven Rautenberg
--
"Love your nation - respect the others."