Sven Rautenberg: Zeichencode in Zeichen konvertieren / Sonderzeichen in Form

Beitrag lesen

Moin!

Die textarea kann alle möglichen Sonderzeichen enthalten - Anführungszeichen, Fragezeichen, Umlaute, auch asiatische Zeichen sollen funktionieren.

Ajax arbeitet grundsätzlich mit UTF-8 - also ist der Zeichenvorrat kein Problem. Wenn PHP auf der anderen Seite damit klarkommt, und idealerweise auch alle normal ausgelieferten Seiten auf UTF-8 basieren, hat man keine Probleme mit unterschiedlichen Codierungen.

Als erstes habe ich dabei einfach mein JavaScript den value aus der textarea rausholen lassen, diesen mit escape() verschlüsselt (es darf ja kein & enthalten sein) und als einen (von mehreren) Parametern an die Funktion SendData (siehe unten) gegeben.

escape() ist die falsche Funktion. encodeURIComponent() ist richtig.

Das funktioniert auch mit Umlauten, nicht aber mit Anführungszeichen - diese werden von PHP seltsamerweise als " empfangen, also so, wie man sie in PHP escapen müsste ($str = """), obwohl der escape-Aufruf in JavaScript vor dem Senden der Daten eigentlich ein %22 daraus gemacht hat.

PHP hat Magic Quotes aktiviert. Solltest du ausschalten - und nur wenn das nicht geht, das Escapen wieder rückgängig machen. Dazu gibts vielfache Postings im hiesigen Archiv sowie überall im Web, wie man das macht - Google kennt die meisten Vorkommen.

Und dies funktioniert bei Umlauten nicht. Ein mb_ord("ä") gibt mir zwar 228 aus, aber ein mb_chr(228) oder ein mb_chr(mb_ord("ä")) gibt ä (2 Zeichen!) aus.

Offenbar ist die Seite, in der du UTF-8-codierte Zeichen ausgibst, nicht mit dieser Codierung an den Browser übertragen worden. Check mal, welches Encoding dir dein Browser in den Seiteninformationen anzeigt.

Die Information über das korrekte Encoding kannst du mit PHP aber mit der Funktion header() anpassen.

Deine geschriebenen Funktionen sind leider allesamt überflüssig. Wenn, dann würden sie an Symptomen herumdoktoren, die niemals auftreten würden, wenn du gewisse Anfängerfehler hinsichtlich des Encodings nicht machen würdest.

Lies beispielsweise auch mal in unserem Wiki nach, was Encoding genau ist: http://wiki.selfhtml.org/wiki/Doku:Grundlagen/Zeichenkodierung_und_geschriebene_Sprache sowie http://wiki.selfhtml.org/wiki/Themen:Zeichencodierung.

- Sven Rautenberg