Martin: ü erzeugt Fehler

Ich lese mit PHP eine Datei, die HTML enthält und erzeuge aus den Daten eine XML-Datei. Damit XML damit was anfangen kann, wandle ich sie mit htmlentities() um. Jetzt streikt der Parser aber, wenn die Datei einen Umlaut enthält. Dann kommt die Fehlermeldung:

Verweis auf eine nicht definierte Entität 'uuml'. Fehler beim Bearbeiten der Ressource ...

Was kann ich da machen?

Gruß und Dank

Martin

  1. Ich probier's einmal mit einer weiteren Codierung/Decodierung in Base64. Oder gibt's was Einfacheres?

    Gruß und Dank

    Martin

    1. hi,

      Ich probier's einmal mit einer weiteren Codierung/Decodierung in Base64. Oder gibt's was Einfacheres?

      CDATA

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. Hm...

        1. Versuch:

        <?php
        $file = "test";

        $content = "<DIV id="idContentDiv" >Ä Ö Ü ä ö ü ß</DIV>";
        if($fh = fopen($file, "w")){
          fwrite($fh,"<![CDATA[".stripslashes(str_replace("'","&#39;",$content))."]]>");
        fclose($fh);
        }

        $fh = fopen($file,"r");
        $content = fread($fh, filesize($file));
        fclose($fh);
        $xml = "<root>";
        $xml .= "<content>".htmlentities(trim($content))."</content>";
        $xml .= "</root>";

        header("Content-type: text/xml");
        print($xml);
        ?>

        Ergibt im Firefox:

        XML-Verarbeitungsfehler: Undefinierte Entität

        und als Quelltext:

        <root><content>&lt;![CDATA[&lt;DIV id=&quot;idContentDiv&quot; &gt;&Auml; &Ouml; &Uuml; &auml; &ouml; &uuml; &szlig;&lt;/DIV&gt;]]&gt;</content></root>

        2. Versuch:

        <?php
        $file = "test";

        $content = "<DIV id="idContentDiv" >Ä Ö Ü ä ö ü ß</DIV>";
        if($fh = fopen($file, "w")){
          fwrite($fh,"<![CDATA[".stripslashes(str_replace("'","&#39;",$content))."]]>");
        fclose($fh);
        }

        $fh = fopen($file,"r");
        $content = fread($fh, filesize($file));
        fclose($fh);
        $xml = "<root>";
        $xml .= "<content>".trim($content)."</content>"; // OHNE HTMLENTITIES
        $xml .= "</root>";

        header("Content-type: text/xml");
        print($xml);
        ?>

        Ergibt im Firefox:

        <root>
        <content><DIV id="idContentDiv" >� � � � � � �</DIV></content>
        </root>

        bzw. im Quelltext:

        <root><content><![CDATA[<DIV id="idContentDiv" >� � � � � � �</DIV>]]></content></root>

        Und im MSIE:

        Im Textinhalt wurde ein ungültiges Zeichen gefunden. Fehler beim Bearbeiten der Ressource.

        Und was jetzt?

        Gruß und Dank

        Martin

        1. Hi,

          $content = "<DIV id="idContentDiv" >Ä Ö Ü ä ö ü ß</DIV>";

          Welche Zeichencodierung hat die PHP-Datei?

          $xml = "<root>";
          $xml .= "<content>".htmlentities(trim($content))."</content>";
          $xml .= "</root>";

          header("Content-type: text/xml");

          Weder im content-type-Header noch in der (fehlenden) xml-Deklaration setzt Du ein encoding, es gilt also UTF-8.

          Setze entweder das tatsächliche encoding oder wandele in UTF-8 um (aber nicht in HTML-Entities, die es in XML ja nicht gibt).

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Schreinerei Waechter
          O o ostern ...
          Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. Sorry:

            <?php
            $file = "test";

            $content = "<DIV id="idContentDiv" >Ä Ö Ü ä ö ü ß</DIV>";
            if($fh = fopen($file, "w")){
              fwrite($fh,"<![CDATA[".stripslashes(str_replace("'","&#39;",$content))."]]>");
            fclose($fh);
            }

            $fh = fopen($file,"r");
            $content = fread($fh, filesize($file));
            fclose($fh);
            $xml = "<?xml version="1.0" encoding="iso-8859-1""."?".">";
            $xml .= "<root>";
            $xml .= "<content>".trim($content)."</content>";
            $xml .= "</root>";

            header("Content-type: text/xml");
            print($xml);
            ?>

            Jetzt funktioniert's:

            Firefox:

            <root>
            <content><DIV id="idContentDiv" >Ä Ö Ü ä ö ü ß</DIV></content>
            </root>

            MSIE:

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

            • <root>
            • <content>
            • <![CDATA[ <DIV id="idContentDiv" >Ä Ö Ü ä ö ü ß</DIV>
                ]]>
                </content>
                </root>

            Nur muss ich jetzt wohl das <![CDATA[  und ]]>  wieder loswerden, damit es dann im Script auch funktioniert?

            Gruß und Dank

            Martin

  2. Hi,

    Verweis auf eine nicht definierte Entität 'uuml'. Fehler beim Bearbeiten der Ressource ...

    Was kann ich da machen?

    die Entität definieren. Sie gehört nicht zum XML-Standardumfang.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi Cheatah,

      Was kann ich da machen?

      die Entität definieren.

      Oder die numerischen Entities verwenden.

      MfG, Dennis.

  3. Hi,

    Damit XML damit was anfangen kann, wandle ich sie mit htmlentities() um.

    Damit XML etwas damit anfangen kann, sorgst Du dafür, daß XML nichts damit anfangen kann?
    Seltsame Logik ...

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  4. Hi,

    Damit XML damit was anfangen kann, wandle ich sie mit htmlentities() um.

    Wie kommst Du darauf, daß - valides xhtml vorausgesetzt - dies nötig wäre?
    Es ist ziemlicher Blödsinn, Daten bei Speicherung derart zu verfälschen und htmlentities() ist dazu gedacht, HTML-Tags bei der Ausgabe in einer HTML-Seite zu "deaktivieren".

    freundliche Grüße
    Ingo

    1. Hi,

      und htmlentities() ist dazu gedacht, HTML-Tags bei der Ausgabe in einer HTML-Seite zu "deaktivieren".

      Nö. Dazu ist htmlspecialchars() gedacht.

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      Schreinerei Waechter
      O o ostern ...
      Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.