XML Parser Probleme mit Umlaut -> neue Zeile

newbi_1

Mitglied
Hallo wieder einaml!
Ich habe ein XML das mit einer Tabelle schön aufbereitet werden soll(encoding="UTF-8")
mein PHP-Parser sieht wie folgt aus:

PHP:
?php
			
	function startTag($xml_parser, $name, $attribut) {
        list ($key, $value) = each ($attribut);
        if ($name != "VARIABLE") {
            print "<TR><TD><strong>$name</strong></TD>";
        }


        while ($key) {
                echo " <TD><strong>$value</strong></TD>";
                list ($key, $value) = each ($attribut);
        }
    }
   
    function endTag($xml_parser, $name) {
        // wird bei Ende-Tag ausgeführt
    }
    function characterData ($xml_parser, $daten) {
        // Ausgabe von PCDATA
		if ( ($daten != "<") && ($daten != ">") ) {
			echo "<TD>$daten</TD></TR>";
		} else { echo "<TD></TD></TR>"; };
    }
	
	
	//$output beinhaltet das XML
		
	
	$xml_parser = xml_parser_create();                              // erzeugt neuen Parser
    xml_set_element_handler ($xml_parser, "startTag", "endTag");    // legt Elemente Handler fest
    xml_set_character_data_handler ($xml_parser, "characterData");  // legt Handler für PCDATA fest
    
    echo "<TABLE border='1' width='100%'>";
		xml_parse ($xml_parser, $output);
		xml_parser_free ($xml_parser);
	echo "</TABLE>";		
?>

Wenn aber ein Umlaut im Text vorkommt, dann wird eine neue Tabellenspalte begonnen
d.h. die Ausgabe schaut so aus:

Kurztext Unbekanntes Schl
üsselwort


Wieso liest der Parser jedes Sonderzeichen als CRLF****

Für Antworten wäre ich sehr dankbar:)
 
Wie liest denn dein Parser die Datei ein?
Versuch mal [phpf]utf8_encode[/phpf], [phpf]utf8_decode[/phpf].
 
Danke erst mal für die Antwort!

Die Daten liefert mir ein WebService zurück.

$response = $client->getMeldung($param);
$output = ($response->importMeldung);

im Xsd-Schema definiert
.....name="importMeldung" expectedContentTypes="text/html" type="xs:base64Binary"


Wenn ich den $output einfach mit print ausgebe, dann sind die Umlate ricxhtig dargestellt.
Mit der Seitenquelltextangabe kommt auch die richtige Anzeige
<kurztext>...unbekanntes Schlüsselwort......</kurztext>


Vielleicht noch ein Tipp? Wäre sehr dankbar.
 
so schaut mein seitenquelltext aus:

</pre><?xml version="1.0" encoding="UTF-8" standalone="no"?>
<importMeldung>
<import id="6">
<meldung>
<nummer>1234</nummer>
<kurztext>Unbekanntes Schlüsselwort 'ERFOLGREICH' wird ignoriert</kurztext>
<typ>Warnung </typ>
<erstellzeitpunkt>2011-02-02</erstellzeitpunkt>
<variable name="Dateiname">test</variable>
<variable name="ZEIT">02.02.2011</variable>
<variable name="NAME">Arbeit</variable>
<variable name="ID">234</variable>
</meldung>

vielleicht hilfts dann weiter
 
Wieso liest der Parser jedes Sonderzeichen als CRLF****


Er liest sie nicht als CLRF, er parst nochmal, weil er ein nicht-ASCII-Zeichen gefunden hat:
php-manual hat gesagt.:
It can be called multiple times inside each fragment (e.g. for non-ASCII strings)

Ich würde dieses Vorhaben wohl eher mit XSLT lösen, da hast du dies Problem nicht.

Generell sollte dir aber klar sein, dass die element-Funktionen für die Elemente zuständig sind, du aber gibst dort Elemente in der pcdata-Funktion aus, was die Grundursache des Übels ist.

Wie auch immer, wenn du das unbedingt damit machen willst sollte es ungefähr so gehen:
Code:
    function startTag($xml_parser, $name, $attribut) {
        
        if ($name != "VARIABLE") {
            echo "<TR><TD><strong>{$name}</strong></TD><TD>";
        }
        else{
            echo "<TR><TD><strong>{$attribut['NAME']}</strong></TD><TD>";
        }       
    }
   
    function endTag($xml_parser, $name) {
        echo "</TD></TR>";
    }
    function characterData ($xml_parser, $daten) {
        echo (trim($daten)==='')?'&nbsp;':$daten;
    }
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück