kostenloser Webspace werbefrei: lima-city


PHP 5.5 preg_replace() /e modifier deprecated

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    mein-wunschname

    mein-wunschname hat kostenlosen Webspace.

    Ich bin gerade dabei eine Website (nicht bei Lima) zur Umstellung auf PHP 5.5 vorzubereiten. Das dort installierte CMS (wird vom Autor nur sporadisch aktualisiert) wirft mir die Meldung aus
    Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in...

    Nun könnte ich diese Meldung in der Produktion einfach unterdrücken, aber ich würde den Missstand lieber grundsätzlich beseitigen.
    http://php.net/manual/de/function.preg-replace.php beschreibt ja, dass ich an Stelle von preg_replace nun preg_replace_callback verwenden soll.
    Leider stehe ich mit den regulären Ausdrücken immer etwas auf Kriegsfuss. Die genannte Codezeile ist
    $string = preg_replace('/\[\[([^|\]]+?)(?:\|([^\]]+))?\]\]/e', "'<a href=\"\$1\">'.(('\$2')?'\$2':'\$1').'</a>'", $string);


    Kann mir jemand helfen und sagen wie ich aus preg_replace preg_replace_callback mache?

    Beitrag zuletzt geändert: 11.5.2015 12:05:55 von mein-wunschname
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. So wie ich die Dokumentation verstehe, müsste das dann z.B. so aussehen (ungetestet!)
    $string = preg_replace_callback('/\[\[([^|\]]+?)(?:\|([^\]]+))?\]\]/', 
                        function ($treffer) {
                            return "<a href=\"\{$treffer[1]}\">". ($treffer[2]?$treffer[2]:$treffer[1])."</a>";
                        }, $string);

    Im Endeffekt ersetzt du den 2. Parameter einfach mit einer Funktion die dessen Aufgabe übernimmt. $treffer ist dabei ein array, das Du im Prinzip benutzen kannst wie davor $0, $1,...

    Beitrag zuletzt geändert: 11.5.2015 14:02:49 von davidlw
  4. Fast, nur die geschweifte Klammer '{' innerhalb des Strings (Zeile 3) darf nicht escaped werden.
    $string = preg_replace_callback('/\[\[([^|\]]+?)(?:\|([^\]]+))?\]\]/', 
                        function ($treffer) {
                            return "<a href=\"{$treffer[1]}\">". ($treffer[2]?$treffer[2]:$treffer[1])."</a>";
                        }, $string);
  5. Uups, das hat man davon, wenn man auf dem Smartphone tippt. Danke für die Korrektur :)
  6. Autor dieses Themas

    mein-wunschname

    mein-wunschname hat kostenlosen Webspace.

    Danke, scheint zu passen.
    Jetzt verstehe ich es sogar.
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!