Axel: xml_parse_into_struct unter php4

Hallo,

möchte Sonderzeichen wie z.B. & von einer XML-Datei auslesen.

<?php
$simple = "<folder><description>&lgt;html&gt;</description></folder>";
$p = xml_parser_create();
xml_parse_into_struct($p, $simple, $vals, $index);
xml_parser_free($p);
echo "Index array\n<pre>";
print_r($index);
echo "\nVals array\n";
print_r($vals);
echo '</pre>';
?>

Das klappt so aber nicht. Wie bekomme ich das hin?

  1. Moin!

    möchte Sonderzeichen wie z.B. & von einer XML-Datei auslesen.

    <?php
    $simple = "<folder><description>&lgt;html&gt;</description></folder>";
    $p = xml_parser_create();
    xml_parse_into_struct($p, $simple, $vals, $index);
    xml_parser_free($p);
    echo "Index array\n<pre>";
    print_r($index);
    echo "\nVals array\n";
    print_r($vals);
    echo '</pre>';
    ?>

    Das klappt so aber nicht.

    Was heißt das?

    Wie bekomme ich das hin?

    Mutmaßlich wird dir der XML-Parser die Entitys auflösen - ein durchaus sinnvolles Verhalten, denn die Entities sind XML-seitiges Encoding, dass dich nicht zu interessieren hat, wenn du dich auf der Seite der Nutzdaten befindest.

    Was willst du genau tun, warum, und was soll rauskommen?

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. Vielen Dank für Deine schnelle Antwort.

      Ich möchte HTML-Code darstellen unter anderem. Sozusagen unter Text sowas wie:
      &lt;html&gt;
      &lt;head&gt;
      &lt;title&gt;Meinungsplatz Umfragen &lt;/title&gt;
      &lt;/head&gt;
      &lt;body bgcolor="#FFFFFF"&gt;

      &lt;/body&gt;
      &lt;/html&gt;
      reinschreiben, um es in einem Textfeld später darzustellen.

      Axel

      Moin!

      möchte Sonderzeichen wie z.B. & von einer XML-Datei auslesen.

      <?php
      $simple = "<folder><description>&lgt;html&gt;</description></folder>";
      $p = xml_parser_create();
      xml_parse_into_struct($p, $simple, $vals, $index);
      xml_parser_free($p);
      echo "Index array\n<pre>";
      print_r($index);
      echo "\nVals array\n";
      print_r($vals);
      echo '</pre>';
      ?>

      Das klappt so aber nicht.

      Was heißt das?

      Wie bekomme ich das hin?

      Mutmaßlich wird dir der XML-Parser die Entitys auflösen - ein durchaus sinnvolles Verhalten, denn die Entities sind XML-seitiges Encoding, dass dich nicht zu interessieren hat, wenn du dich auf der Seite der Nutzdaten befindest.

      Was willst du genau tun, warum, und was soll rauskommen?

      • Sven Rautenberg
      1. Moin!

        Ich möchte HTML-Code darstellen unter anderem. Sozusagen unter Text sowas wie:
        &lt;html&gt;
        &lt;head&gt;
        &lt;title&gt;Meinungsplatz Umfragen &lt;/title&gt;
        &lt;/head&gt;
        &lt;body bgcolor="#FFFFFF"&gt;

        &lt;/body&gt;
        &lt;/html&gt;
        reinschreiben, um es in einem Textfeld später darzustellen.

        Und wo ist da jetzt die Verbindung zum XML?

        Du hast XML. Da steht HTML-Quelltext drin, alle XML-Sonderzeichen sind als Entity notiert, damit das XML nicht durcheinanderkommt.

        Geparst erhältst du nicht die Entities, sondern die tatsächlichen Zeichen in deinem String.

        Die willst du jetzt so ausgeben, dass wieder der HTML-Quelltext als dargestellter Text im Browser erscheint. Also mußt du den String wieder escapen - und zwar für den Kontext "HTML-Zeichendarstellung". htmlspecialchars() macht genau das. Auch in Textfeldern - bzw. GERADE in Textfeldern (ich vermute mal, du meinst <textarea>).

        Wenn du sogar die Entities "nackt" darstellen willst, wäre htmlspecialchars() sogar zweimal aufzurufen (wobei ich nicht glaube, dass das rein technisch gesehen notwendig ist).

        Siehe auch http://forum.de.selfhtml.org/archiv/2006/11/t141240/#m917699 für eine ausführlichere Erklärung.

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
        1. Nein!

          Wenn Du dieses Script ausführst, bekommst Du KEIN tatsächliches Sonderzeichen.
          Es funktioniert eben nicht.
          Wir reden absolut aneinander vorbei.

          Vielleicht führ mal das Script aus. Dann weisst Du was ich meine.

          Axel

          1. Moin!

            Nein!

            Wenn Du dieses Script ausführst, bekommst Du KEIN tatsächliches Sonderzeichen.
            Es funktioniert eben nicht.
            Wir reden absolut aneinander vorbei.

            Vielleicht führ mal das Script aus. Dann weisst Du was ich meine.

            Gib mir doch einfach das ausgedruckte Ergebnis. Dann weiß ich, was DU meinst.

            - Sven Rautenberg

            --
            "Love your nation - respect the others."