Sven Rautenberg: encoding in PHP ändern möglich?

Beitrag lesen

Moin!

Der erste Feed, der läuft enthält Umlaute und beginnt mit

<?xml version="1.0" encoding="iso-8859-1" ?>

In diesem Feed sind die deutschen Umlaute im Encoding-Schema ISO-8859-1 codiert, bestehen aus genau einem Byte.

Der Zweite, von mir gewünschte, liefert auch Umlaute, also identisch dem Ersten, nur halt mehr Ergebnisse, beginnt aber mit

<?xml version="1.0" encoding="UTF-8" ?>

In diesem Feed sind die Umlaute im Encoding-Schema UTF-8 codiert und bestehen aus zwei oder mehr Bytes.

Kann ich den Feed erst in eine Variable ziehen und vor dem Parsen die encoding Definitionen korrigieren?

Du mußt nicht nur die Encoding-Definition ändern, sondern auch das Encoding des Feed-Textes konvertieren.

$file = file( $searchurlakt ); // $searchaktuell ist die URL des XML-Feed
$filealt = "<?xml version="1.0" encoding="UTF-8" ?> ";
$filereplace = "<?xml version="1.0" encoding="iso-8859-1" ?>";
$file = str_replace ($filealt, $filereplace, $file);

Wenn du eine Konservendose mit Tomaten hast, und du nimmst einen Edding und schreibst "Paprika" drauf - dann verwandeln sich die Tomaten in der Dose trotzdem nicht in Paprika, obwohl beide rot sind.

Als Ergebnis ändert sich aber leider nichts - die falschen Umlaute bleiben drin.

Ganz ehrlich gesagt würde ich dir dringend raten, bei UTF-8 zu bleiben. Mit ISO-8859-1 kannst du nur 256 verschiedene Zeichen codieren (jedes ist ein Byte groß), mit UTF-8 können dir aber mehrere Millionen verschiedene Zeichen geliefert werden (u.a. arabische, chinesische oder japanische Schriftzeichen, sowie unzählige Satzzeichen wie typographisch korrekte Anführungszeichen), die du mit ISO-8859-1 nicht codieren kannst.

Die Frage ist doch nur, wo du den Feed verarbeitest. Wenn du die Ergebnisseite auf UTF-8 umstellst, hast du keine Probleme beim Konvertieren und eventuellen Zeichenverlusten.

- Sven Rautenberg

--
My sssignature, my preciousssss!