• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

preg_replace problem

Gimli

Mitglied
Guten Abend

Ich habe momentan das Problem, dass ich mit preg_replace ein paar Platzhalter in einem Dokument ersetzen will, es aber nur funktioniert, wenn ich vorher htmlentities() mache und danach wieder html_entity_decode(). Nur ist das ja etwas performance lastig und ich wollte fragen ob es da ne andere lösung gibt. Hier mal der HTML code:

HTML:
<!DOCTYPE HTML>
<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="language" content="{meta_lang}">
    <meta name="keywords" content="{meta_keywords}">
    <meta name="description" content="{meta_description}">
    <meta name="robots" content="{meta_robots}">
    <meta name="page-topic" content="{meta_pagetopic}">
    <meta name="revisit-after" content="{meta_revisit}">
    <meta name="expires" content="{meta_cache}">
    <title>{title}</title>
</head>

<body>

    <div id="wrapper">
        <div id="content">
            {content}
        </div>
        <div id="nav">
            {nav}
        </div>
    </div>

</body>
</html>


Und hier der Teil vom preg_replace:

PHP:
        $file = htmlentities($file); // escape the file
        foreach($this->vars as $var => $content) { // loops the vars array
            $file = preg_replace('/{'.$var.'}/', $content, $file); // replaces the vars in the templates with its contents
        }
        echo html_entity_decode($file); // remove the escape entities

Die Variable $file ist einfach nur ein String der vorher ausgelesen wird aus einer index.tpl
 
Werbung:
Habs jetzt mit addslashes und stripslashes gelöst. Wenn es noch eine schnellere/bessere Variante gibt, lasst es mich wissen.
 
Ganz einfach. Alle komischen {} konstrukte durch etwas wie
PHP:
<?= $variablenname ?>
ersetzen und dann ganz einfach das script nach einem ob_start() includieren und dann die ausgabe mit ob_get_clean() abfangen und da speichern wo du sie haben willst.
 
Werbung:
ich mach es absichtlich nicht mit <?=$variablenname?> da es möglichst kurz gehalten werden soll -> {variablenname} und so der Code übersichtlicher ist. ohne das addslashes funkioniert einfach der regex nicht.
 
Der Grund warum es nicht geht ist ganz einfach. Variablen müssen mit preg_quote excaped werden und sonderzeichen wie { müssen auch excaped werden.
Da du einfach nur einen festen String durch einen anderen ersetzen willst ist es allerdings viel sinvoller eine funktion wie str_replace zu verwenden.

Mal ganz davon abgesehen das du dir viel zu viel mühe für etwas gibst das am ende keinen vorteil bringt.
Es würde sogar Sinn machen es in PHP zu machen da die meisten Editoren syntax highlighting unterstützen und somit jeder gleich sieht wo variablen sind. dies ist bei deinem eigenen format natürlich nicht der fall.
 
Zurück
Oben