Zitat von
Frickeldrecktuxer_TM:
Wenn in einem String die Zeichenfolge "%u20AC" auftaucht, ist das kein UTF-8, mit irgendwelchen Standard-
Unicode-Schnickschnack-Funktionen wirst du da nicht weit kommen. "%u20AC" ist kein Zeichensatz oder eine Zeichenkodierung, sondern ein Mapping, genauer ein Escape-Sequenz, die Word-Zeichen (in dem Fall wohl UTF-16) auf Byte-Zeichensätze abbildet.
Laut Dokumentation kommt die Funktion urldecode() nur mit %xx zurecht, also Byte-Zeichen, keine Word-Zeichen. Was du suchst ist eine Funktion, die UTF-16 in einen für PHP brauchbaren Zeichensatz umwandelt, oder eine Funktion die UTF-16-Strings in UTF-8-Strings transformiert (das ginge theoretisch auch in JavaScript, kommt drauf an, für was man einfacher eine fertige Funktion findet). Die UTF-(-Transformation findet sich im
Unicode-Standard.
Das Euro-Zeichen wäre Beispielsweise in UTF-8als 0xE282AC kodiert.
Ich weiß nicht, was du da mit dem Kaufmannsund und UTF8_decode() machst...
Der Fehler liegt hier auf der Seite eines kranken Mappings von JavaScript, da sollte man reparieren. Laut SelfHTML (
http://de.selfhtml.org/javascript/ob...gig.htm#escape) sollte dein encode() ohnehin nur für
ASCII-Zeichen funktionieren, daß er dir beim Euro-Zeichen überhaupt was ausgibt ist bereits (zumindest laut SelfHTML, es wird vielleicht irgendwo eine aktuellere Dokumentation geben) undefiniertes Verhalten. Das Beispiel zu encodeURI() sieht ganz brauchbar aus, oder besser: es verhält sich für den Beispielstring so, wie ich es erwarte (in einem Firefox 1.5 in einer UTF-8-Umgebung).