Tom: IE 6.0 und Firefox und PHP-Reste

Hello,

Meine kleine Templatemaschine funktioniert überraschend gut. Nun habe ich aber noch ein Problem mit PHP-Resten, die in den HTML-Templates noch drinstehen.

Bsp:

<?php
  echo $out;

$time_end = microtime_float();
  $time = $time_end - $time_start;

echo "<p style="margin-top:9pt;">Berechnungszeit: $time Sekunden</p>\r\n";
?>

Der Browser zeigt das generierte HTML sauber an, gibt darüber aber einen Teil dieses PHP-Restes aus:

Berechnungszeit: $time Sekunden

\r\n"; ?>

Wenn ich die Tags durch Kommentarzeichen ersetzen lasse, ist optisch wieder alles in Butter und es treten keine sichtbaren/merklichen Fehler auf

$_out['<?php'] = '<!-- ';
   $_out['?>']    = ' -->';

$html = str_replace(array_keys($_out),$_out,$html);

echo $html;

Wenn ich dann aber im Script genau diese beiden Zeilen wieder auskommentiere

#$_out['<?php'] = '<!-- ';
   #$_out['?>']    = ' -->';

steigt scheinbar der Parser aus. Es kommt der ganze Rest des Scriptes...

']    = ' -->';

if (isset($_POST['btn']['showscript']))
  {
      highlight_file(__FILE__);
      exit;
  }
  elseif (isset($_POST['btn']['post']))
  {
      $_out['<!-- {MAINFORM} -->'] = make_post_form('./templates/postform-mastertable-completed.html','').'<!-- {MAINFORM} -->';
  }
  elseif (isset($_GET['t']))
  {
      $thread_no = intval($_GET['t']);

if($thread_no > 0)
      {
         $_out['<!-- {MAINFORM} -->'] = make_show_article($dateiname, $thread_no).'<!-- {MAINFORM} -->';
      }
  }
  else
  {
      $_out['<!-- {MAINFORM} -->'] = make_unordered_list($dateiname, $indent, $tab).'<!-- {MAINFORM} -->';
  }

$html = file_get_contents('./templates/main.html');

$html = str_replace(array_keys($_out),$_out,$html);

###############################################################################

HTML-Output

###############################################################################
echo $html;

#echo "<pre>\r\n";
#echo htmlentities(print_r($_out,1));
#echo "</pre>\r\n";

?>

Vermutlich ahbe ich ja nur irgendwelche bösen Sachen gemacht, z.B. die Indexe für die Arrays böse benannt?

Wie komme ich denn da nun weiter?

Liebe Grüße aus dem Cyberspace

Tom vom Berg

--
Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de
  1. Hello,

    kleiner Nachtrag noch

    $_out['<?php'] = '<!-- ';
       $_out['?>']    = ' -->';

    wenn ich stattdessen mit Sternen auskommentiere, kommt wieder der alte Zustand

    /*
     $_out['<?php'] = '<!-- ';
     $_out['?>']    = ' -->';
    */

    führt zu Ausgabe bzw Anzeige von:

    Berechnungszeit: $time Sekunden

    \r\n"; ?>

    Liebe Grüße aus dem Cyberspace

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  2. Hi Tom,

    Wenn ich dann aber im Script genau diese beiden Zeilen wieder auskommentiere

    #$_out['<?php'] = '<!-- ';
       #$_out['?>']    = ' -->';

    steigt scheinbar der Parser aus. Es kommt der ganze Rest des Scriptes...

    Ich hab mir jetzt nicht dein gesamtes Script angesehen, aber hier scheinst du vergessen zu haben, dass die Zeichenfolge ?> einen einzeiligen PHP-Kommentar beendet, ebenso wie ein Zeilenumbruch es tut. (Steht hier im Handbuch)

    Im Zweifelsfall also lieber so schreiben:

    #$_out['?'.'>'] = ' -->';

    Viele Grüße,
      ~ Dennis.

    1. Hello,

      Im Zweifelsfall also lieber so schreiben:

      #$_out['?'.'>'] = ' -->';

      Ja danke, das mach ich. und '<?php' habe ich sicherheitshalber auch gegen '<'.'?php' ausgetauscht, oder ist das nicht notwendig?

      Die mMn ungültigen Namen im Platzhalter-Array habe ich inzwischen auch beseitigt. Ich habe es umgebaut

      $_out['name'][$x]  =  Platzhaltername
        $_out['value'][$x] =  Ersetzung (HTML)

      und eine Funktion add_placeholder(&$_out,$name,$value) erstellt.
      Funktioniert.

      Aber das Problem mit dem Stück PHP-Code im HTML-Text habe ich immer noch.

      <?php
        echo $out;

      $time_end = microtime_float();
        $time = $time_end - $time_start;

      echo "<p style="margin-top:9pt;">Berechnungszeit: $time Sekunden</p>\r\n";
      ?>

      Wenn ich das Template normal öffne, kommt ja der geliche Fehler. Also nehme ich an, dass der Browser mit PHP-Code nicht klar kommt. Ich hatte gedacht, dass der einfach ignoriert werden würde? Scheint also nicht so zu sein.

      Es gehört ja auch keiner rein in die Templates, aber wer weiß, ob nicht ein User mal was reinschreibt...

      Liebe Grüße aus dem Cyberspace

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hi,

        Aber das Problem mit dem Stück PHP-Code im HTML-Text habe ich immer noch.

        <?php
          echo $out;

        $time_end = microtime_float();
          $time = $time_end - $time_start;

        echo "<p style="margin-top:9pt;">Berechnungszeit: $time Sekunden</p>\r\n";
        ?>

        Wenn ich das Template normal öffne, kommt ja der geliche Fehler. Also nehme ich an, dass der Browser mit PHP-Code nicht klar kommt. Ich hatte gedacht, dass der einfach ignoriert werden würde?

        Generell gilt, dass HTML-Clients ihnen unbekannte Tags ignorieren, darin liegende Inhalte aber trotzdem darstellen sollten.

        (Oder hier noch spezifischer, http://www.w3.org/TR/1999/REC-html401-19991224/conform.html#h-4.2: "User agents must not render SGML processing instructions (e.g., <?full volume>) or comments.")

        Also, was hast du hier? Einen Tag, der mit <?php beginnt, dem Client unbekannt ist. Also ist der Tag zu ignorieren. Bis wo geht der Tag? Bis zur ersten schliessenden spitzen Klammer. Danach folgt Inhalt, der darzustellen ist ...

        MfG ChrisB

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

          Hi,

          Aber das Problem mit dem Stück PHP-Code im HTML-Text habe ich immer noch.

          <?php
             echo $out;

          $time_end = microtime_float();
             $time = $time_end - $time_start;

          echo "<p style="margin-top:9pt;">Berechnungszeit: $time Sekunden</p>\r\n";
          ?>

          Wenn ich das Template normal öffne, kommt ja der geliche Fehler. Also nehme ich an, dass der Browser mit PHP-Code nicht klar kommt. Ich hatte gedacht, dass der einfach ignoriert werden würde?

          Generell gilt, dass HTML-Clients ihnen unbekannte Tags ignorieren, darin liegende Inhalte aber trotzdem darstellen sollten.

          (Oder hier noch spezifischer, http://www.w3.org/TR/1999/REC-html401-19991224/conform.html#h-4.2: "User agents must not render SGML processing instructions (e.g., <?full volume>) or comments.")

          Also, was hast du hier? Einen Tag, der mit <?php beginnt, dem Client unbekannt ist. Also ist der Tag zu ignorieren. Bis wo geht der Tag? Bis zur ersten schliessenden spitzen Klammer. Danach folgt Inhalt, der darzustellen ist ...

          die > stehen aber alle innerhalb von Doublequotes. Aber das scheint wohl nix zu nützen...

          die Array-Index-Bezeichner hätte ich vermutlich gar nicht umbauen müssen?
          http://www.php.net/manual/en/language.types.array.php

          Ich erinnere mich dunkel, dass wir darüber auch schon mal diskutiert haben.
          Da hätte ich wohl ruhig diese Form lasen können:  <!-- {MAINFORM} --> ?

          nun gut, mühsam ernährt sich das Eichhörnchen.

          Liebe Grüße aus dem Cyberspace

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de