Kurze Frage zu Ajax (Prototype)
NextStep
- javascript
Hallo Zusammen
Ich schreibe zum ersten mal in diesem Forum da ich auch nach längerer Recherche keine Lösung im Internet fand :-(
Es geht um folgendes:
Ich möchte Daten aus einem Formular per Ajax übermitteln. Dazu verwende ich das Prototypeframework.
Dies klappt auch wunderbar. Jedoch werden die speziellen Zeichen &,=,%,+ nicht richtig übermittelt, da die für den Aufbau des Parameterstrings benötigt werden. Nun meine Frage: Gibt es eine Protototype / Scriptaculous oder gar JavaScript eine Funktion, welche diese automatisch in Hex-Darstellung umwandelt oder muss ich dies selbst programmieren? Ich denke, ich bin sicher nicht der erste Programmierer, der auf dieses Problem stösst nur hab ich leider bisher noch keine saubere Lösung im Internet gefunden.
Besten dank für eure Tips
Hi ... das Problem hatte ich auch, daher kodiere ich immer alles base64. Mit PHP kein Problem, weil es da die entsprechende Funktion gibt, dafür in JS leider nicht. Ich hatte damals was im Netz gefunden, was sehr gut funktioniert hat, kenne leider die Quelle nicht mehr ... aber google hilft sicher weiter.
mfg
Knusperklumpen
Hi ... das Problem hatte ich auch, daher kodiere ich immer alles base64. Mit PHP kein Problem, weil es da die entsprechende Funktion gibt, dafür in JS leider nicht.
Das hat nichts mit base64 zu tun und JS hat dafür Funktionen.
Struppi.
Hi
Das hat nichts mit base64 zu tun und JS hat dafür Funktionen.
Ich wollte sagen, dass ich die Daten bevor ich sie über httpRequest verschicke (egal ob vom oder zum Server) immer mit base64 encode.
Meines erachtens gibt es aber keine JS-Funktion zum encoden und decoden von base64, oder?
Naja, wie dem auch sei, es funktioniert wie ich es mache ... oder ist es sinnfrei die base64-Kodierung vorzunehmen?
mfg
Knusperklumpen
Hallo,
Das hat nichts mit base64 zu tun und JS hat dafür Funktionen.
Ich wollte sagen, dass ich die Daten bevor ich sie über httpRequest verschicke (egal ob vom oder zum Server) immer mit base64 encode.
http://de.wikipedia.org/wiki/Base64
Text als binäre Daten zu versenden ist irgendwie hmm ...
Meines erachtens gibt es aber keine JS-Funktion zum encoden und decoden von base64, oder?
auch Wikipadia verlinkt auf uns:
http://aktuell.de.selfhtml.org/artikel/javascript/utf8b64/base64.htm
Naja, wie dem auch sei, es funktioniert wie ich es mache ... oder ist es sinnfrei die base64-Kodierung vorzunehmen?
"Durch die Kodierung steigt der Platzbedarf des Datenstroms um 33 %"
Grüße
Thomas
Hi.
Ok, das hab ich gelesen und das mit dem Overhead ist natürlich mist, da geb ich dir recht. Widerrum ist mir wichtig, dass meine Daten sauber und komplett ankommen und keine Zeichensatzprobleme auftreten, daher lass ich das mal so wie es ist, zumal ich auch komplette Arrays hin- und herschaufel oder PHP-generiertes HTML nachlade. Da leb ich halt mit dem Overhead bis ich mal ne bessere Lösung finde.
Aber danke für die Links!
mfg
Knusperklumpen
Dies klappt auch wunderbar. Jedoch werden die speziellen Zeichen &,=,%,+ nicht richtig übermittelt, da die für den Aufbau des Parameterstrings benötigt werden. Nun meine Frage: Gibt es eine Protototype / Scriptaculous oder gar JavaScript eine Funktion, welche diese automatisch in Hex-Darstellung umwandelt oder muss ich dies selbst programmieren?
Ja, es gibt mehrere, schau mal hier:http://de.selfhtml.org/javascript/objekte/unabhaengig.htm
Struppi.
hi,
Dies klappt auch wunderbar. Jedoch werden die speziellen Zeichen &,=,%,+ nicht richtig übermittelt,
die JavaScript-Funktion heißt escape();
roro
hi,
Dies klappt auch wunderbar. Jedoch werden die speziellen Zeichen &,=,%,+ nicht richtig übermittelt,
die JavaScript-Funktion heißt escape();
roro
Besten Dank für die schnellen Antworten! Habe am falschen Ort gesucht da ich dachte, dass Prototype eine solche Funktion anbietet.
Die Funktion escape() ist jedoch unzureichend aber es funktioniert tadelos mit encodeURIComponent().
Es ist doch noch nicht aller Tage abend! :-)
Habe mich leider zu früh mit der Lösung encodeURIComponent() zufrieden gegeben. Das Problem ist folgendes:
Mit 'encodeURIComponent' werden die Daten in UTF-8 umgewandelt. D.H. es werden 2 Hexwerte gespeichert. Auf der Serverseite werden die Daten in einer MySQL Datenbank mit ISO-8859-1 gespeichert und auch so wieder zurück gesendet. Da die Daten per UTF-8 kommen, konvertiere ich sie mit der PHP Funktion 'utf8_decode'. Ich bin aber mit dieser Lösung nicht sehr zu frieden, schliesslich macht es keinen Sinn die Daten zu erst zu konvertieren und anschliessend wieder in den Ursprung zurückzubringen.
Gibt es eine gleichwertige Funktion zu encodeURIComponent, die die Daten in ISO-8859-1 lässt? Oder sollte der Server und die Datenbank, falls überhaupt möglich, in UTF-8 umgestellt werden? Oder was gibt es sonst noch für Möglichkeiten, die schöner als meine Lösung ist?
Hallo,
Das Problem ist folgendes:
Mit 'encodeURIComponent' werden die Daten in UTF-8 umgewandelt.
Ja, das ist der große Vorteil von encodeURIComponent. ;)
Gibt es eine gleichwertige Funktion zu encodeURIComponent, die die Daten in ISO-8859-1 lässt?
Ja, escape(). Aber das will man nicht wirklich - damit beschränkst du halt die möglichen Zeichen auf Latin1 und das Dumme ist, das Zeichen außerhalb von Latin1 nicht einfach entfernt, sondern mit %uXXXX kodiert werden, also so in deine Datenbank wandern würden, wenn du sie nicht herausfilterst.
Oder sollte der Server und die Datenbank, falls überhaupt möglich, in UTF-8 umgestellt werden?
Ja, das wäre sowieso sinnvoll.
Oder was gibt es sonst noch für Möglichkeiten, die schöner als meine Lösung ist?
UTF-8 verwenden und gut ist. Die Beschränkung auf ISO-8859-1 ist selten nötig und führt nur zu Problemen, wenn Benutzer mal Zeichen außerhalb von ISO-8859-1 in Formulare eingeben.
Mathias