JavaScript PHP Ajax und unvalid XML

775726

Cadet 2nd Year
Registriert
Jan. 2009
Beiträge
25
Hallo Liebe CB Gemeinde,
ich habe folgendes Problem und zwar lesen ich per AJAX Daten aus einer Datenbank aus, beim Response soll auf der Serverseite eine valid XML Datei gebaut werden, wie das halt so ist bei AJAX. Diese XML Datei wird aber nicht valid gebaut weil die Daten aus der Datenbank Sonderzeichen/Sonstige Zeichen enthält und so mehrere Fehlermeldungen geworfen werden
Beispiel Fehlermeldung:

DOMDocument::createElement(): unterminated entity reference

Ich denke das hat was mit den UNI Code/Zeichensatz zutun, hinzu kommt noch das alle möglichen Zeichen in der Datenbank enthalten sind:
Beispiel Zeichen aus Datenbank

• جديدترين آهنگ هاي اجساسي - Ø¢...
• ¿¾»µÄÍøÖ•µ¼º½ÍøÕ¾£¬ÂÌÉ«¡¢¿ì½Ý¡¢°²È«£¡
• ¡ÚSociety6(¥½¥µ¥¨¥Æ¥£¥•¥Ã¥¯¥¹)ÀìÌçŹ¡Û6mania¤Ø¤è¤¦.
• 我要嬦网

Aber ich kann leider nicht auf diese Sonderzeichen/Sonstige Zeichen verzichten.
Könnt ihr mit helfen hier?
Hier mein aktueller PHP Code der eigentlich die XML bauen soll.

PHP:
<?php
// Datei: get_worte.php
// http://localhost/woerter/get_worte.php?suchtext=fisch

$suchtext = $_REQUEST['suchtext'];


include("../tabs/include/daten_inc.php");
include("../tabs/include/connect_inc.php");

mysql_select_db("search", $con);

$mydoc = new DOMDocument("1.0","UTF-8");

$mydoc->formatOutput = true;
$root = $mydoc->createElement("alle");
$mydoc->appendChild($root);
$sql = "select Title, URL, description, extra, date from websites where description like '%" . $suchtext . "%' ";



$rs_ergebnisse = mysql_query($sql, $con);
while  (list($Title,$URL,$description,$extra,$date) = mysql_fetch_row($rs_ergebnisse))
{
	
	$OneResults = $mydoc->createElement("OneResult", "");

	$Title = $mydoc->createElement("Title", $Title);
	$URL = $mydoc->createElement("URL", $URL);
	$description = $mydoc->createElement("description", $description);
	$extra = $mydoc->createElement("extra", $extra);
	$date = $mydoc->createElement("date", $date);

	$root->appendChild($OneResults);
	$OneResults->appendChild($Title);
	$OneResults->appendChild($URL);
	$OneResults->appendChild($description);
	$OneResults->appendChild($extra);
	$OneResults->appendChild($date);
}
$ergebnis = $mydoc->saveXML();

mysql_close($con);

header('Content-Type: text/xml; charset=ISO-8859-1');
echo $ergebnis;
?>
 
1. Steig auf JSON um und spare dir diverse XML Kopfschmerzen
2. Schau das du an jedem Punkt utf-8 encoding einsetzt, Zeile 45 müsste entsprechend sein:

PHP:
header('Content-Type: text/html; charset=utf-8');

3. Alles was aus der Datenbank kommt sollte vor dem Einfügen in das XML mit htmlspecialchars() geparsed werden
 
Zuletzt bearbeitet:
775726 schrieb:
Hallo Liebe CB Gemeinde,
ich habe folgendes Problem und zwar lesen ich per AJAX Daten aus einer Datenbank aus, beim Response soll auf der Serverseite eine valid XML Datei gebaut werden, wie das halt so ist bei AJAX.
Nur weil dort das Wort XML drin vorkommt, ist es im realen Umfeld nicht "so". ;) Wenn du eine einfache Interoperabilität zwischen JS und PHP haben willst, nimm JSON, wie zoz schon meinte. Sonst kommt der Content meist schon fertig raus und wird per JS nur in den richtigen Container gelegt. Kommt halt immer auf die Anwendung und den Content an, aber XML-Übergaben hab ich noch nie irgendwo gesehen - wohl einfach weil es viel zu komplex ist als Werteübergabe. Eh du das alles gebaut und geparst hast, bist du mit einem einfachen json_encode (auf PHP Seite) und JSON.parse (auf Client-Seite; bzw. automatischen Parsen durch Frameworks) schon lange am Ziel.
 
Hat sich erledigt die Lösung für mich war
PHP:
$description = htmlspecialchars($description); 	
                $description = stripslashes($description);
welches alle Sonderzeichen parsed.

Danke und Grüße
 
Zurück
Oben