kostenloser Webspace werbefrei: lima-city


preg_replace() the /e modifier is deprecated

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    mein-wunschname

    mein-wunschname hat kostenlosen Webspace.

    Ich habe mal wieder ein Problem, dass mit der Umstellung auf eine aktuellere PHP-Version aufgetaucht ist. Ich erhalte zu der Code-Zeile (nicht von ir selbst geschrieben)

    $_GET['text'] = preg_replace("#(0x[0-9A-F]{2})#e", "chr(hexdec('\\1'))", $_GET['text']);


    die Nachricht (notice):
    PHP Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead

    Ich verstehe schon gar nicht, wo hier der /e modifier ist, sehe nur #e. Erst recht bin ich nicht in der Lage, den Code anzupassen (obwohl ich mir schon diverse Beispiele, die ich mit Google zu ähnlichen Problemen gefunden habe, angesehen habe).
    Möglicherweise kann mir mal jemand auf die Sprünge helfen. Wäre dafür sehr dankbar.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. Der Modifier steht immer hinter dem Delimiter. Der ist halt hier #statt /.
    Was der Modifikator tut: Statt einfach zu ersetzten wird der Code ausgeführt und das Ergebniss dann als Ersetzungstext genommen.
    Als Ersatz kannst du preg_replace_callback nutzen und die Funktion in den Callback auslagern.
  4. Autor dieses Themas

    mein-wunschname

    mein-wunschname hat kostenlosen Webspace.

    Ich habe das jetzt so gemacht
    $_GET['text'] = preg_replace_callback("#(0x[0-9A-F]{2})#",
                        function ($treffer) {
                            return "chr(hexdec('\\1'))";
    					}, $_GET['text']);


    Die Nachricht ist weg und es scheint auch sonst zu funktionieren.

    Danke noch für den Hinweis zu #

    Beitrag zuletzt geändert: 16.8.2017 10:03:11 von mein-wunschname
  5. mein-wunschname schrieb:
    Ich habe das jetzt so gemacht
    $_GET['text'] = preg_replace_callback("#(0x[0-9A-F]{2})#",
                        function ($treffer) {
                            return "chr(hexdec('\\1'))";
    					}, $_GET['text']);


    Die Nachricht ist weg und es scheint auch sonst zu funktionieren.

    Da wirst du noch ein Problem bekommen. Die Rückgabe von der Funktion ist "chr(hexdec('\\1'))" als Text. Deine Treffer werden also mit diesem Text ersetzt, nicht mit den Funktionsrückgaben.
    return chr(hexdec($treffer[1]));

    sollte sein was du brauchst.
  6. 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!