Saboteur: Kodierungsprobleme...

Beitrag lesen

Hallo Leute,

ich bin verzweifelt, ich kann keine vernünftige Lösung meines Problems finden, nur Workarounds..

Ich arbeite jetzt mit dem folgenden Modell:
die Daten zwischen dem Server und Client werden mit Hilfe von JSON ausgetauscht. Auf der Serverseite wird JSON mit PHP-Funktion json_encode() erzeugt, auf der Clientseite mit einem Javascriptobjekt, das unter http://www.devpro.it/JSON/files/JSON-js.html zu finden ist. Die ganze Seite wird aus mehreren Gründen im UTF-8 Kontext dargestellt. Als Framework benutze ich jQuery.

Die Formulardaten bekomme ich mit der Funktion:

  
function processForm(objectID, action) {  
 var data = new Object;  
 $('#'+objectID).find('input').each(function() {  
  if (this.type != 'button') {  
   if (this.type == 'checkbox') {  
    data[this.name] = this.checked;  
   } else data[this.name] = this.value;  
  }  
 });  
 $('#'+objectID).find('select').each(function() {  
  data[this.name] = this.value;  
 });  
 $('#'+objectID).find('textarea').each(function() {  
  data[this.name] = this.value;  
 });  
 data['object'] = objectID;  
 data['action'] = action;  
  
 for (var property in data) {  
  if (typeof(data[property]) == 'string') {  
   data[property] = utf8_encode(data[property]);  
  }  
 }  
  
 var requestData = new Object;  
 requestData['json'] = JSON.encode(data);  
 requestData['location'] = 'form';  
  
 postData(requestData)  
}  

Und jetzt kommt das Problem. Falls ich diese Funktion ohne utf8_encode im IE verwende (das war die ursprüngliche Variante)

  
for (var property in data) {  
 if (typeof(data[property]) == 'string') {  
  data[property] = utf8_encode(data[property]);  
 }  
}  

und nicht typische Zeichen, wie Umlaute und kyrillische Buchstaben im Formular eingebe wird das JSON-Objekt auf der Serverseite nicht geparst. Funktion json_decode interpretiert es, als ungültiges JSON. Merkwürdigerweise funktioniert alles im Firefox einwandfrei.

Wenn ich versuche die Formulardaten einzukodieren (aus meiner Sicht ist es nicht logisch, da die Seite schon im UTF-8 Kontext dargestellt wird und daher müssen alle Eingaben auch einkodiert sein), funktioniert es im IE mit machen Zeichen, wie "ü" gut und mit anderen, wie "Ü" wieder nicht. Im Firefox wird JSON in allen Fällen interpretiert, aber die Rückwerte werden unlesbar.

Ein paar Beispiele, die tatsächliche Zeichen werden mit Charcodes ersetzt, da ser automatische Filter von selfhtml sie leider nicht durchläßt.

  
1) Firefox mit utf8_encode.  
  
Eingabe: üüüü  
JSON: {reason":"üüüü"}  
Rückwert: üüüü  
  
Eingabe: ÜÜÜÜ  
JSON:{"reason":"Ã Ã Ã Ã "}  
Rückgabe: Ã Ã Ã Ã   
  
2) IE mit utf_encode.  
  
Eingabe: üüüü  
JSON:  
{"reason":"üüüü"}  
Rückgabe: üüüü  
  
Eingabe: ÜÜÜÜ  
JSON:{"reason":"Ã Ã Ã Ã "}  
Rückgabe: JSON wird nicht interpretiert  
  
3) Firefox ohne utf8_encode.  
  
Funktioniert alles.  
  
4) IE ohne utf8_encode.  
  
Falls man untypische Zeichen eingibt, wird JSON nicht interpretiert.  

Die funktion utf8_encode für Javascript wurde aus selfhtml.org entnommen. Ich teste meine Anwendung nur mit den letzten Versionen von Firefox 3 und Explorer 7.

Wo kann das Problem sein?