PHP Problem mit eigenem Template-System seit Umstieg von PHP4 zu -5

crab

Cadet 3rd Year
Registriert
Jan. 2009
Beiträge
47
Hallo zusammen!

Und zwar gehts es darum, dass ich vor langer Zeit mal ein kleines, selbst erstelltes Template-System von einem Bekannten bekommen, welches ich für div. Webseiten nutze.
Es klappte immer wunderbar (für meine Zwecke), aber seitdem ich von PHP4 zu PHP5 umgestiegen bin habe ich ein Problem.

In PHP4 sah die Template-Klasse noch so aus:
PHP:
<?php
class utemplate

  {
    var $dateiname;
    var $inhalt="";

    function utemplate($a, $ordner="code/template/")
    {
	  $this->$dateiname=$a;
      $this->$inhalt=implode("",file($ordner.$this->$dateiname));  //Alle Zeilen der Datei zu einem String zusammenfassen
    }

    function anzeigen()
    {
      $this->$inhalt=ereg_replace("[§].([[:alpha:]]*).[§]","",$this->$inhalt); //Unbenutzte Template-Variablen, die zwischen () stehen, löschen
      echo $this->$inhalt;
    }

    function ersetzen($arr)
    {
      for($i=0;$i<count($arr);$i++)
      {
        $this->$inhalt=str_replace("§".key($arr)."§",current($arr),$this->$inhalt);
        next($arr);
      }
    }
  }
?>
...funktionierte wie gesagt.

Nach der Umstellung auf PHP5 bekam ich wegen dem nachfolgenden Code hinter der Pseudovariable $this-> vermehrt eine Fehlerausgabe, woraufhin ich die den Code leicht umgeschrieben habe:

PHP:
<?php
class utemplate

  {
    private $dateiname;
    private $inhalt="";

    public function utemplate($a, $ordner="code/template/")
    {
	  $this->dateiname=$a;
      $this->inhalt=implode("",file($ordner.$this->dateiname));  //Alle Zeilen der Datei zu einem String zusammenfassen
    }

    public function anzeigen()
    {
      //Unbenutzte Template-Variablen, die zwischen () stehen, löschen
	  $this->inhalt=ereg_replace("[§].([[:alpha:]]*).[§]","",$this->inhalt); 
      echo $this->inhalt;
    }

    public function ersetzen($arr)
    {
      for($i=0;$i<count($arr);$i++)
      {
        $this->inhalt=str_replace("§".key($arr)."§",current($arr),$this->inhalt);
        next($arr);
      }
    }
  }
?>

Jetzt sind die Fehlerausgaben von PHP zwar weg, aber anstelle der einzusetzenden Strings, bekomme ich nun nur jeweils ein �-Zeichen angezeigt.


Weiss jemand Rat?!
 
Hast du mal versucht, Templates und sämtlichen PHP-Code als UTF-8 codiert abzuspeichern?

Offtopic: Statt dem implode könntest du auch einfach ein file_get_contents machen.
 
Ich nehme auch an, dass du deinen Code als Ansii oder ähnlich gespeichert hast.
Eventuell liegt es aber auch nicht an deiner PHP Datei, sondern an deinem Browser, der nicht UTF-8 als Zeichenkodierung auswählt.

btw: Bitte verwende kein ereg_replace()! Die Funktion ist veraltet und wird mit PHP6 ganz entfernt. Nehme dafür lieber preg_replace(), was auch meist schneller ist.
 
Speichere Deine Dateien mal im Format 'UTF8-ohne BOM' ab - sofern Du UTF8 als Zeichensatz nutzt (Beachte hier Webserver, Datenbanken etc.)
 
Zurück
Oben