ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
445
445
EMPFEHLEN
-
Guten Abend zusammen!
Habe einen XML-Parser, der eine XML einliest und die Daten in eine DB schreibt bzw. sie zum testen erstmal ausgibt. Hier der Code zum ausgeben der Daten:
Ich habe die variable $doit deklariert, die genau dann true ist, wenn der Parser über ein <Data>-Tag läuft - Dadurch werden nur die <Data>-Daten ausgegeben und nicht etwa irgendwelche Rudimente, die Excel mit in die XML gespeichert hat, ich aber garnicht brauche (siehe if() im char_handler).PHP-Code:function se_handler($parser, $element, $attr){
global $doit;
switch ($element){
case "Row":
echo "<tr>";
break;
case "Data":
echo "<td>";
$doit = true;
break;
}
}
function ee_handler($parser, $element){
switch ($element){
case "Row":
echo "</tr>";
break;
case "Data":
echo "</td>";
break;
}
}
function char_handler($parser, $data){
global $doit;
if($doit){
echo $Data;
$doit = false;
}
}
$doit = false;
$file = "xml_example.xml";
$parser = xml_parser_create();
xml_set_element_handler($parser, "se_handler", "ee_handler");
xml_set_character_data_handler($parser, "char_handler");
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, FALSE);
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8");
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
if(!($handle = fopen($file, "r"))){
die("Datei nicht gefunden.");
}
echo "<table border=1>";
while ($daten = fread($Handle, 4096)){
if (!xml_parse($parser, $daten, feof($handle))){
die("XML parser error.");
}
}
echo "</table>";
xml_parser_free($parser);
Jetzt zum Problem: Wenn nun ein String wie zum Beispiel "Entlüftungsschlauch" gelesen wird, gibt er nur "Entl" aus und lässt "üftungsschlauch" weg, splittet den string also quasi vor dem Umlaut und gibt nur den ersten Teil aus.
Meine Beobachtung: Wenn ich das $doit und die if() im char_handler raus nehme, werden die String mit Umlauten korrekt ausgegeben. Problem ist dann halt, dass der ganze mist den excel mit ins Dokument geschrieben hat dann auch ausgegeben wird (z.b. Author, Erstellungsdatum usw).
Ich bin da echt etwas ratlos
P.S. Hier eine Beispiel-XML.
Ich hoffe jemand kann mir bei diesem Mysterium weiterhelfen! Vielen Dank
-
Moin,
da dies offensichtlich ein Zeichensatz-Problem ist, folgende Fragen:
Wie ist das Skript mit deinem Parser codiert?
Welche PHP-Version ist am Laufen?
Vorschlag auf gut Glück:
1.Skript in UTF-8 codieren.
...und
2. diesen charset auch beim Erstellen des Parser angeben:Code :1
$parser = xml_parser_create('UTF-8');
Ähnliche Themen
-
FF verschluckt Rahmen
Von ToboTheRibbler im Forum CSSAntworten: 10Letzter Beitrag: 26.04.10, 22:10 -
php include - function verschluckt was?
Von lanfire im Forum PHPAntworten: 13Letzter Beitrag: 03.05.09, 19:49 -
csv verschluckt Null
Von callis2 im Forum C/C++Antworten: 2Letzter Beitrag: 28.08.07, 20:07 -
Blätterfunktion verschluckt Bilder
Von StonE12 im Forum PHPAntworten: 2Letzter Beitrag: 22.02.07, 00:40 -
getURL verschluckt URL teilweise
Von Veränderung im Forum Flash PlattformAntworten: 2Letzter Beitrag: 21.01.06, 16:07





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren