bugsBunny: FF 3.5.2 CDATA Bug?

Hallo,
stehe ich gerade auf dem Schlauch (ist ja recht warm.) oder liegt hier ein CDATA Bug im FF 3.5.2 vor?

Getestet im "Safemode", daher ohne Addons ergibt das folgende nicht das was ich von einem CDATA Abschnitt erwartet hätte.

  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">  
<head>  
<title>CDATA</title>  
</head>  
<body>  
<![CDATA[  
<strong>BUGS BUNNY</strong>  
]]>  
</body>  
</html>  

  1. Tach,

    Getestet im "Safemode", daher ohne Addons ergibt das folgende nicht das was ich von einem CDATA Abschnitt erwartet hätte.

    hast du den HTML- oder den XML-Parser getestet?

    mfg
    Woodfighter

    1. hast du den HTML- oder den XML-Parser getestet?

      Ich denke mit dem DOCTYPE sollte doch der XML-Parser bemüht werden. Im Moment kann ich aber wegen der Temperaturen hier kaum noch klar denken...

      MfG
      fast flüssiger bugsBunny

      1. hast du den HTML- oder den XML-Parser getestet?

        Ich denke mit dem DOCTYPE sollte doch der XML-Parser bemüht werden. Im Moment kann ich aber wegen der Temperaturen hier kaum noch klar denken...

        Keineswegs.
        bei http: ist der http header Content-type zuständig
        bei file: ist (bei FF) die Dateinamenserweiterung .xhtml erforderlich.

        mfg Beat

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische
        1. Keineswegs.
          bei http: ist der http header Content-type zuständig
          bei file: ist (bei FF) die Dateinamenserweiterung .xhtml erforderlich.

          Nachdem ich jetzt ne Runde im Kühlschrank verbracht habe...
          stimmt "application/xhtml+xml" ist wohl der entsprechende MIME-Type.
          Das ist allerdings aus verschiedenen Gründen nicht wirklich eine Option.
          Werde ich wohl den "ausgezeichneten Beispielblock" in Entities umwandeln müssen. Das wollte ich mir der Einfachheit halber eigentlich ersparen.

          1. Werde ich wohl den "ausgezeichneten Beispielblock" in Entities umwandeln müssen. Das wollte ich mir der Einfachheit halber eigentlich ersparen.

            Lass es den Server vor dem Ausliefern parsen.

            1. Lass es den Server vor dem Ausliefern parsen.

              Oehm...ich kann Dir in dem Zusammenhang gerade nicht folgen.
              Was soll ich den Server womit parsen lassen.

              1. Lass es den Server vor dem Ausliefern parsen.

                Oehm...ich kann Dir in dem Zusammenhang gerade nicht folgen.
                Was soll ich den Server womit parsen lassen.

                Den CDATA-Abschnitt.

                Vor dem Ausliefern deines Dokuments lass eine Routine Drüberrattern die aus

                <![CDATA[<span class="error">Ich bin ein Beispielcode</span>]]>

                das hier macht

                &lt;span class=&quot;error&quot;&gt;Ich bin ein Beispielcode&lt;/span&gt;

                Mit PHP und preg_replace ist das ein 1-Zeiler - als Suchmuster sollte folgendes taugen (nicht getestet) (<![CDATA[)(.*)(]]>), ersetzt wird das mit $1 + htmlspecialchars($2) + $3

                1. Mit PHP und preg_replace ist das ein 1-Zeiler - als Suchmuster sollte folgendes taugen (nicht getestet) (<![CDATA[)(.*)(]]>), ersetzt wird das mit $1 + htmlspecialchars($2) + $3

                  Nachtrag (fürs Archiv):

                  <?php  
                  	// Das öffnende und schließnede Tag für den CDATA bereich wollen wir nicht - darum gleich non-capturing parentheses drumherum  
                  	// der e-Modifikator sorgt dafür, dass der Code evaluiert wird ([link:http://at2.php.net/preg_replace@title=Beispiel 4], [link:http://at2.php.net/manual/de/reference.pcre.pattern.modifiers.php@title=e (PREG_REPLACE_EVAL)])  
                  	$search = '/(?:<!\[CDATA\[)(.*)(?:\]\]>)/e';  
                  	// [link:http://at2.php.net/htmlspecialchars@title=htmlspecialchars] sollte für die HTML-Ausgabe passen (ggf. sollte man ENT_QUOTES verwenden)  
                  	$replace = 'htmlspecialchars("\\1")';  
                  	$string = '<![CDATA[<span class="error">Ich bin ein Beispielcode</span>]]>';  
                  	  
                  	echo preg_replace($search, $replace, $string);  
                  ?>
                  
                2. Was soll ich den Server womit parsen lassen.

                  Den CDATA-Abschnitt.

                  Vor dem Ausliefern deines Dokuments lass eine Routine Drüberrattern die aus

                  <![CDATA[<span class="error">Ich bin ein Beispielcode</span>]]>

                  das hier macht

                  &lt;span class=&quot;error&quot;&gt;Ich bin ein Beispielcode&lt;/span&gt;

                  Danke suit,

                  ja, mit einer Scriptsprache ist das geeignete Lösung.
                  Mittlerweile konnte ich wieder klarer denken und bin noch auf eine andere mögliche Lösung gekommen.

                    
                  <?php ob_start(); ?>  
                  viele Beispieltags  
                  <?php echo htmlspecialchars(ob_get_clean(), ENT_NOQUOTES); ?>  
                  
                  

                  Wahrscheinlich ist deine Lösung aber sinnvoller, da sie ja im Prinzip allgemein für evtl. weitere Dateien nutzbar wäre.
                  Bei "dynamischen" Seiten bevorzuge ich auch eher das EVA Schema, davon kann man bei meiner Lösung wohl eher nicht sprechen.)

                  MfG
                  bugsBunny (auf Normaltemperatur)

  2. @@bugsBunny:

    nuqneH

    <![CDATA[
    <strong>BUGS BUNNY</strong>
    ]]>

    In der Strict-Variante darf 'strong' (wie auch andere Inline-Elemente oder Text) kein Kind von 'body' sein. ↗SELFHTML: http://de.selfhtml.org/html/allgemein/grundgeruest.htm#dokumenttyp@title=Dokumenttyp-Deklaration.

    Dass es CDATA-Abschnitte in XML, aber nicht in HTML gibt (also in XHTML nur bei Verarbeitung als XML), wurde ja schon geklärt.

    Qapla'

    --
    Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
    1. Hi,

      <![CDATA[
      <strong>BUGS BUNNY</strong>
      ]]>

      In der Strict-Variante darf 'strong' (wie auch andere Inline-Elemente oder Text) kein Kind von 'body' sein.

      Und in wie fern wäre der Textinhalt eines CDATA-Bereiches jetzt ein Element?

      MfG ChrisB

      --
      Light travels faster than sound - that's why most people appear bright until you hear them speak.
      1. @@ChrisB:

        nuqneH

        In der Strict-Variante darf 'strong' (wie auch andere Inline-Elemente oder Text) kein Kind von 'body' sein.

        Und in wie fern wäre der Textinhalt eines CDATA-Bereiches jetzt ein Element?

        Bei Verarbeitung als XML gibt es natürlich kein 'strong'-Element, nur Textinhalt. Dieser darf auch nicht unmittelbar im 'body' stehen.

        Qapla'

        --
        Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
        1. Und in wie fern wäre der Textinhalt eines CDATA-Bereiches jetzt ein Element?

          Bei Verarbeitung als XML gibt es natürlich kein 'strong'-Element, nur Textinhalt. Dieser darf auch nicht unmittelbar im 'body' stehen.

          Hmm, den SELFHTML Abschnitt über http://de.selfhtml.org/xml/regeln/zeichen.htm#cdata@title=CDATA schon mal gelesen?

          1. Hallo Bugs,

            Bei Verarbeitung als XML gibt es natürlich kein 'strong'-Element, nur Textinhalt. Dieser darf auch nicht unmittelbar im 'body' stehen.
            Hmm, den SELFHTML Abschnitt über http://de.selfhtml.org/xml/regeln/zeichen.htm#cdata@title=CDATA schon mal gelesen?

            du auch? Und auch verstanden?
            Und ist dir auch bekannt, dass in (X)HTML Strict Textknoten und Inline-Elemente keine direkten Kindelemente von body sein dürfen?

            So long,
             Martin

            --
            Lieber blau machen, als sich schwarz ärgern.
            1. Das war wohl ein Missverständniss, bezogen auf "Elemente" und auch ein schlechtes Beispiel. Das worum es ursprünglich ging, macht mit oder ohne umschliessende(n) Tags keinen Unterschied.