JSON parsen Problem mit Form-Tag
Bene
- javascript
Hallo Zusammen,
ich hole mir per HTTP-Request verschiedene HTML-Daten in einem assoziativen Array, dieses encode ich vorher mit PHP5 json_encode().
Im Javascript decode ich Sie wieder mit der eval Funktion.
Dies funktioniert einwandfrei.
Sobald ich aber ein Codestück mit Form-Tags verwende geht nichts mehr.
Der Server liefert mir dabei dies zurück:
{"html":"<!--// Search Service //-->\r\n\t\t\t\t\t \t\t<div>\r\n\t\t\t\t\t \t\t</div>\r\n\t\t\t\t\t \t\t<form><input type="hidden" name="PHPSESSID" value="8befc508f4486285a4cddde74f0d7ddd" /></form>"}
Der Fehler im Javascrip lautet:
missing } after property list
client.html (line 157)
({"html":"<!--// Search Service //-->\r\n\t\t\t\t\t \t\t<div>\r\n\t\t\t\t\t \t\t</div>\r\n\t\t\t\t\t \t\t<form><input type="hidden" name="PHPSESSID" value="8befc508f4486285a4cddde74f0d7ddd" /></form>"})
Hat jemand eine Idee woran dies liegen könnte und wie man das behebt?
Gruß,
Bene
Der Fehler im Javascrip lautet:
missing } after property list
client.html (line 157)
({"html":"<!--// Search Service //-->\r\n\t\t\t\t\t \t\t<div>\r\n\t\t\t\t\t \t\t</div>\r\n\t\t\t\t\t \t\t<form><input type="hidden" name="PHPSESSID" value="8befc508f4486285a4cddde74f0d7ddd" /></form>"})Hat jemand eine Idee woran dies liegen könnte und wie man das behebt?
Ja und ja.
Hallo erstmal!
Es liegt an den Anführungszeichen. JavaScript 'denkt', dass nach type="
Schluss ist.
Du musst deinen HTML-Schnipsel mit htmlentities()
aufbereiten, bevor du in an json_encode()
übergibst.
Gruss,
Mathias
Erstmal Danke für die Antwort.
Hier mal meine neuen Ergebnisse:
wenn ich den HTML-Code vor dem json_encode() mit htmlentities() aufbereite, funktioniert die übergabe richtig.
Auf dem Client wird mir aber nicht mehr als HTML-Dargestellt, sondern ich sehe eine Seite die den Quelltext selbst enthält.
Ich nehme an das ich die HTML-Entities vor dem Einbinden auf der Seite wieder "zurückwandeln" muss. Habe aber für Javascript keine entsprechende Funktion gefunden.
---
Mein HTML-Code enthält übrigens das Hidden-Field mit der Session-ID
garnicht, dieses wird wohl von der Funktion json_encode() eingefügt??
Was ja ganz schon Banane wäre...
Hier mal zum nachvollziehen:
[code lang=php]
/* create structure */
$this->html = '<!--// Search Service //-->
<div>
</div>
<form></form>';
/* create data array */
$data_array = array ('html' => $this->html);
/* encode data array to json */
$encoded_data = json_encode($data_array);
[/code}
hi,
wenn ich den HTML-Code vor dem json_encode() mit htmlentities() aufbereite, funktioniert die übergabe richtig.
Auf dem Client wird mir aber nicht mehr als HTML-Dargestellt, sondern ich sehe eine Seite die den Quelltext selbst enthält.
Ich nehme an das ich die HTML-Entities vor dem Einbinden auf der Seite wieder "zurückwandeln" muss. Habe aber für Javascript keine entsprechende Funktion gefunden.
Warum maskierst du die Anführungszeichen nicht einfach - durch einen vorangestellten Backslash?
Mein HTML-Code enthält übrigens das Hidden-Field mit der Session-ID
garnicht, dieses wird wohl von der Funktion json_encode() eingefügt??
Nein, wenn dann vermutlich eher vom Session-Mechanismus von PHP.
gruß,
wahsaga
hi,
Warum maskierst du die Anführungszeichen nicht einfach - durch einen vorangestellten Backslash?
OK, zugegeben - die richtige Frage müsste eigentlich lauten:
Warum macht die Funktion json_encode() dies nicht gleich selber?
(Denn wenn sie ungültigen JS-Code erzeugt, ist sie als fehlerhaft zu betrachten.)
gruß,
wahsaga
OK, zugegeben - die richtige Frage müsste eigentlich lauten:
Warum macht die Funktion json_encode() dies nicht gleich selber?
Weil es ein Bug ist?
(Denn wenn sie ungültigen JS-Code erzeugt, ist sie als fehlerhaft zu betrachten.)
Dabei ist http://www.json.org/ doch eigentlich sehr aussagekräftig, was das Escaping angeht.
hi,
Warum macht die Funktion json_encode() dies nicht gleich selber?
Weil es ein Bug ist?
Ja, sagte ich doch direkt im nächsten Satz:
(Denn wenn sie ungültigen JS-Code erzeugt, ist sie als fehlerhaft zu betrachten.)
gruß,
wahsaga
hi,
Warum maskierst du die Anführungszeichen nicht einfach - durch einen vorangestellten Backslash?
Würde ich ja gerne tun, aber da die Anführungszeichen ja erst nach dem Ausführen von json_encode() auftreten. Bleiben diese davon unberührt.
Warum fügt PHP-Überhaupt eine SessionID ein, eigentlich sollte das doch wie "normaler" Text behandelt werden...??
Naja, ich werde wohl wieder auf eine andere JSON-Parser-Klasse zurückgreifen. Diese läuft dann auch auf Systemen < PHP5.
Gruß,
Bene