Wicki: HTML-Code im iFrame ohne Interpretation

Hallo,

ich habe eine HTML-Datei mit 2 iFrame's. In iFrame 1 soll eine 2. HTML-Datei lediglich angezeigt (nicht vom Browser interpretiert) werden. In iFrame 2 wird dann die gleiche HTML-Datei ganz normal vom Browser interpretiert.

Mein Problem liegt bei iFrame 1 und meine bisherige Lösung ist:

  • mit Firefox: ich erzeuge ein Duplikat der 2. HTML-Datei mit dem Dateityp 'txt' und lasse dieses in iFrame 1 anzeigen
  • mit IE6: im Duplikat sind die spitzen Klammern (< >) umgewandelt in ihre Entities (&lt; &gt;) und das Ganze wird umklammert von <pre>-Tags

Meine Frage:
kennt jemand eine Lösung, in der ich auf die verschiedenen Duplikate verzichten kann ?

Gruß Wicki

  1. @@Wicki:

    nuqneH

    Meine Frage:
    kennt jemand eine Lösung, in der ich auf die verschiedenen Duplikate verzichten kann ?

    Meine Frage:
    Steht dir PHP zur Verfügung?

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. @@Wicki:

      nuqneH

      Meine Frage:
      kennt jemand eine Lösung, in der ich auf die verschiedenen Duplikate verzichten kann ?

      Meine Frage:
      Steht dir PHP zur Verfügung?

      Qapla'

      PHP steht zur Verfügung.
      Nochmal zur Verdeutlichung:
      ich will ausgehend von einer HTML-Datei diese in iFrame 1 lediglich anzeigen und in iFrame 2 vom Browser auch interpretieren lassen.

      1. Hallo,

        PHP steht zur Verfügung.

        das ist schön.
        Dann erzeuge doch eine PHP Datei welche deine HTML Datei per Dateizugriff einliest und dann mit htmlentities() den HTML Code umwandelt und dann ausgibt. diese PHP Datei lässt du dann im ersten iFrame anzeigen.

        Viele Grüße,
        Tim

      2. @@Wicki:

        nuqneH

        PHP steht zur Verfügung.
        Nochmal zur Verdeutlichung:
        ich will ausgehend von einer HTML-Datei diese in iFrame 1 lediglich anzeigen und in iFrame 2 vom Browser auch interpretieren lassen.

        Warum Iframes?

        <?php [code lang=php]$code = [link:http://de.php.net/manual/de/function.file-get-contents.php@title=file_get_contents](code.phtml); ?>
        <figure class="sourcecode"><code><?php echo [link:http://de.php.net/manual/de/function.htmlspecialchars.php@title=htmlspecialchars]($code); ?></code></figure>
        <figure class="rendered"><?php echo $code; ?></figure>[/code]

        Oder vielleich willst du den Code gar nicht in eine externe Date auslagern, sondern im Dokument notieren:

        <?php [code lang=php]$code = [link:http://de.php.net/manual/de/language.types.string.php#language.types.string.syntax.nowdoc@title=<<<'EOT']  
        [code lang=html]<p>  
          Das ist ein Beispielsatz mit einem <a href="http://example.net">Beispiellink</a>.  
        </p>
        

        EOT;[/code] ?>[/code]

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
        1. iFrame macht optisch was her (Scrolleisten), figure ist wohl HTML5.
          Mit PHP habe ich es auch schon vergeblich versucht.
          Das Problem ist:
          In den beiden iFrame-Tags muss ich letztlich (hier per Javascript) die Source benennen, die bei iFrame 1 lediglich angezeigt und bei iFrame 2 aber auch interpretiert werden soll. Ich sehe da keine Möglichkeit, per PHP in den iFrame-body hinein zu schreiben. Ob überhaupt eine Umwandlung der Tag-Klammern (< >) notwendig ist, ist eine offene Frage. Auch eine "text/plain"-Angabe reicht nicht aus.

          Wicki

          1. @@Wicki:

            nuqneH

            iFrame macht optisch was her (Scrolleisten)

            Die Optik ist Sache von CSS. Die Scrolleisten kannst du bei (so gut wie) jedem Element haben.

            Bei 'textarea' bekämst du gleich die Möglichkeit geschenkt, die Größe der Box zu verändern.

            figure ist wohl HTML5.

            Wohl ja.

            In den beiden iFrame-Tags

            Elementen.

            muss ich letztlich (hier per Javascript) die Source benennen

            ?? Warum per JavaScript?

            Ich sehe da keine Möglichkeit, per PHP in den iFrame-body hinein zu schreiben.

            Warum Iframes?

            Ob überhaupt eine Umwandlung der Tag-Klammern (< >) notwendig ist, ist eine offene Frage.

            Die Umwandlung wäre nicht erforderlich, wenn du das Dokument als XML verarbeiten lässt, dann ginge es mit <![CDATA[ … ]]>. Ich glaube nicht, dass du das willst.

            Qapla'

            --
            Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
            (Mark Twain)
            1. Om nah hoo pez nyeetz, Wicki

              Ergänzung:

              In den beiden iFrame-Tags
              Elementen.

              in bunt

              Matthias

              --
              1/z ist kein Blatt Papier.

              1. Om nah hoo pez nyeetz, Wicki

                Ergänzung:

                In den beiden iFrame-Tags
                Elementen.
                in bunt

                Matthias

                das ist ein "akademisches" Problem und ich weiß wohl zu unterscheiden zwischen Tag | Attribut | Anweisung. Wobei letztlich auch ein HTML-Tag eine Art "Anweisung" für den Browser darstellt, sich so und so zu verhalten.
                Trotzdem Dank für die Anteilnahme.

                Gruß Wicki

          2. Mit PHP habe ich es auch schon vergeblich versucht.

            Wie denn?

            Schreibe ein kleines PHP- Programm und übergib die URL der anzuzeigenden HTML- Datei als Parameter.

            Rufe deine PHP- Datei mit dem Parameter in iframe 1 auf.

            PHP liest nun die HTML- Datei, wandelt die spitzen Klammern um und gibt das Ergebnis aus. Müsste doch funzen.

            Gruß, Gast

            1. PHP liest nun die HTML- Datei, wandelt die spitzen Klammern um und gibt das Ergebnis aus. Müsste doch funzen.

              Tipp: Wenn du die Zeilenumbrüche darstellen möchtest, nimm nicht <pre>, das erzeugt einen horizontalen Scrollbalken bei langen Zeilen.

              Verwende echo nl2br( $text );

              New Line wird zu  <br>, anzuwenden nach Umwandlung der spitzen Klammern.

              Gruß, Gast

              1. @@Gast:

                nuqneH

                Tipp: Wenn du die Zeilenumbrüche darstellen möchtest, nimm nicht <pre>, das erzeugt einen horizontalen Scrollbalken bei langen Zeilen.

                Was sich mit CSS beheben ließe.

                Mit CSS könnte man auch das 'code'-Element so formatieren, dass man kein 'pre'-Element braucht.

                Qapla'

                --
                Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                (Mark Twain)
                1. ich habe nun einen PHP-Test gemacht entsprechend dem Vorschlag von "gast". Also mit

                    
                  $code=file_get_contents(...); $data=htmlspecialchars($code);  
                  $data=nl2br($data); echo $data;  
                  
                  

                  Es funktioniert sogar, <pre>-Anweisungen sind nicht erforderlich. Der einzige Nachteil: Formatierung in Gestalt von Einrückungen geht verloren.

                  Gruß Wicki

                  1. @@Wicki:

                    nuqneH

                    Es funktioniert sogar, <pre>-Anweisungen sind nicht erforderlich. Der einzige Nachteil: Formatierung in Gestalt von Einrückungen geht verloren.

                    Was sich mit CSS beheben ließe: white-space. Und dann brauchst du auch nl2br() nicht.

                    Qapla'

                    PS: HTML-Elemente sind keine „Anweisungen“. Man verwendet HTML-Elemente, um Inhalte http://de.selfhtml.org/html/text/logisch.htm@title=auszuzeichnen. Für Code dementsprechend das 'code'-Element.

                    --
                    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                    (Mark Twain)
                    1. wenn ich white-space:pre bei dem PHP-Programm verwende funktioniert das unter Firefox, nicht mehr beim IE6.

                      Vielen Dank für die zahlreichen Hinweise !

                      Gruß Wicki

                      1. Hi,

                        mein Beileid dass du für den IE6 Anpassungen vornehmen musst.

                        ~dave

  2. Tach!

    • mit Firefox: ich erzeuge ein Duplikat der 2. HTML-Datei mit dem Dateityp 'txt' und lasse dieses in iFrame 1 anzeigen

    Dateitypen spielen im Web keine Rolle. Der Content-Type im HTTP-Header ist ausschlaggebend. text/plain wäre reiner Text. Vermutlich macht dein Webserver das für dich.

    • mit IE6: im Duplikat sind die spitzen Klammern (< >) umgewandelt in ihre Entities (&lt; &gt;) und das Ganze wird umklammert von <pre>-Tags

    Der IE6 denkt sich: "Wenn da text/plain kommt und im Anfang der Ressource HTML-Code vorkommt, dann hat der Webserver bestimmt einen Fehler gemacht und es hätte text/html sein sollen. Also korrigiere ich das mal stillschweigend." Fehlerkorrekturen kommen ja alle naselang auch in anderen Browsern in diversen Situationen zum Tragen. Dass das eine nicht gewünschte Korrektur ist, kann man dem IE6 nicht sagen. text/html und eine kontextgerechte Behandlung der HTML-eigenen Zeichen bringt das von dir erstrebte Ergebnis in jedem Fall, auch in anderen Browsern.

    dedlfix.