brainsalade: encoding in PHP ändern möglich?

Hallo,

ich habe folgendes Problem:

Ich parse einen XML-Feed in php, was auch wunderbar funktioniert.

Nun gibt es den gleichen Feed erweitert (was ich gerne hätte), dieser wird aber mit falschem encoding ausgeliefert:

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

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

und läuft einwandfrei.

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" ?>

und erzeugt so die falsche Ausgabe der Umlaute.

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

Ich habe folgendes versucht:

$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);

danach parse ich $file:

foreach( $file as $zeile )
{
 $start_titel = strpos( $zeile, "title=" );
 if( $start_titel > 0 )
 {
  $ende_titel = strpos( $zeile, "" description" );
  $laenge = $ende_titel - $start_titel;
  $titel = substr( $zeile, $start_titel + 7, $laenge - 7 );
  $ende_beschreibung = strpos( $zeile, "" siteHost" );
  $laenge_beschreibung = $ende_beschreibung - $ende_titel;
  $beschreibung = substr( $zeile, $ende_titel + 15, $laenge_beschreibung - 15 );
  $ende_url = strpos( $zeile, "" biddedListing" );
  $laenge_url = $ende_url - $ende_beschreibung;
  $url = substr( $zeile, $ende_beschreibung + 12, $laenge_url - 12 );

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

Muss die Ersetzung woanders hin, oder ganz anders gelöst werden?

Bitte helft ...

Vielen Dank
brainsalade

  1. Hallo,

    evtl. ginge es ja, wenn ich zusätzlich Variablen einfüge - aber wo definiere ich, dass diese berücksichtigt werden?

    $encoding="iso-8859-1";
    $langname="de";

  2. 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!
  3. Hallo,

    vielen Dank, ich konnte das Problem lösen.

    Viel Spass noch

    euer brainsalade