XML Parser liefert bei Umlaut nicht kompletten String
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
code
dank
datei
datum
element
fragment
http
inhalt
jemand
konvertierung
pappen
part
set
sonderzeichen
string
teil
tip
umstellen
url
wort
-
Hey ;)
Ich habe ein kleines Problem mit meinem XML Parser...
Grundsätzlich habe ich alles hin bekommen, wie ich es will, allerdings bekomme ich bei einem Umlaut als Inhalt eines Elements nur alles von dem Umlaut weg.
z.B. <element>Geräte</element>
Nach dem parsen -> Inhalt von element: "äte"
Wenn ich die Details weg lasse, sieht mein PHP Code so aus:
(...) function contents($parser, $data) { $inhalt =utf8_decode($data); echo $inhalt; } (...) $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "startTag", "endTag"); xml_set_character_data_handler($xml_parser, "contents"); xml_parse($xml_parser, $xml, true);
Der Code für's parsen an sich ist denke ich uninteressant. Wenn ich mit die Daten ausgeben lassen will, bekomme ich bei Worten mit Umlaut halt nur alles ab (und inklusive) dem Umlaut.
utf8_decode() verwende ich nur, damit ich keine komischen Zeichen, sondern richtige Umlaute bekomme.
Kann mir jemand sagen, warum ich nicht das vollständige Wort erhalte?
Bzw. wie ich das vollständige Wort erhalte?
// EDIT:
Habe bemerkt, dass das utf8_decode() sehr wohl einen Einfluss hat.
Es ändert mir zwar das komische Zeichen in einen Umlaut um, schneidet den Rest des Strings aber ab.
Ich habe bei StackOverflow jemanden gefunden, der genau das gleiche Problem hat. Ihm wurde nicht geholfen, und ich habe es ebenfalls probiert. Die dort genannten Tipps funktionieren nicht (bzw. ich habe es nicht zusammengebracht.), aber vielleicht hat ja jemand von euch damit Erfahrung?!
Link: http://stackoverflow.com/questions/4278071/utf8-decode-returns-only-a-part-of-the-encoded-string
Danke im voraus,
Sincer
Beitrag zuletzt geändert: 24.8.2011 21:28:25 von sincer -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
genau! da haben sich schon etliche NETTE leute die pappen franselig gesprochen darüber!!
ALLES was utf-8 ist MUSS utf-8 sein! (sollen wir das alles NOCHMALS aufzählen, was ALLES ist?)
Beitrag zuletzt geändert: 25.8.2011 0:15:26 von hemiolos -
Hey ;)
hemiolos schrieb: (sollen wir das alles NOCHMALS aufzählen, was ALLES ist?)
Also ich habe jetzt mal die Kodierung der PHP Datei selbst von ANSI auf UTF-8 gestellt.
Jetzt werden mir keine kryptischen Zeichen mehr angezeigt. Der String mit einem Umlaut wird aber dennoch abgeschnitten.
Das utf8_decode() habe ich nun weg genommen.
Hast du noch einen Tipp für mich?
lg
Sincer -
Hey ;)
Danke für deine Hilfe :)
Die UTF-8 Konvertierung der Datei hat mir die Sonderzeichen aus dem Weg geräumt.
Der schwierige Fehler lag in einem Teil des Codes, der in dem geposteten Ausschnitt gar nicht zu sehen war: Dem Parsen selbst.
http://www.php.net/manual/de/function.xml-set-character-data-handler.php:
Character data handler is called for every piece of a text in the XML document. It can be called multiple times inside each fragment (e.g. for non-ASCII strings).
Ich habe in meiner Funktion immer nur so etwas:
function contents($parser, $data) { if(...) $inhalt = $data; // Do something... }
Laut der definition kann $data aber auch nur einen Teil des Inhalts eines Elements haben, und so muss man den String selbst zusammen basteln.
Richtig ist also:
function contents($parser, $data) { if(...) $inhalt .= $data; // Do something... }
Sprich .= (statt nur = ) um den String zusammen zu setzen.
Das habe ich nicht gewusst.
Das Problem ist also gelöst :)
Danke,
Sincer -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage