Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: preg_replace(): The /e modifier is deprecated, use preg_replace_callback

    toppi

    • Viel Schreiber
    • Beiträge: 651
    Error-Meldungen auf der Startseite bei Umstellung auf PHP 5.5:

    Code: PHP  [Auswählen]
    Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /homepages/33/d183561635/htdocs/modified eCommerce Shopsoftwareneu/includes/classes/class.inputfilter.php on line 300

    Das ist dazu die Zeile 300 in class.inputfilter.php:

    Code: PHP  [Auswählen]
                    $source = preg_replace('/&#(\d+);/me', "chr(\\1)", $source); // decimal notation

    Code: PHP  [Auswählen]
    Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /homepages/33/d183561635/htdocs/modified eCommerce Shopsoftwareneu/includes/modules/metatags.php on line 182

    und das die Zeile 182 in metatags.php:

    Code: PHP  [Auswählen]
        return preg_replace( '/&#(\d+);/me',"chr('\\1')",$Return);

    Wie müssten die Codes geändert werden, damit dies auf PHP 5.5 läuft?
    Danke im voraus.

    Linkback: https://www.modified-shop.org/forum/index.php?topic=32316.0
    Modulshop - Eine große Auswahl an neuen und hilfreichen Modulen für die modified eCommerce Shopsoftware

    ralph_84

    • Fördermitglied
    • Beiträge: 499
    • Geschlecht:
    Suche in "/includes/classes/class.inputfilter.php":

    Code: PHP  [Auswählen]
                    $source = preg_replace('/&#(\d+);/me', "chr(\\1)", $source); // decimal notation

    und ersetze mit:

    Code: PHP  [Auswählen]
          $source = preg_replace_callback(
            '/&#(\d+);/m',
            create_function (
              '$m',
              'return chr($m[1]);'
            ),
            $source
          );

    Suche in Datei "/inlcudes/modules/metatags.php":

    Code: PHP  [Auswählen]
        return preg_replace( '/&#(\d+);/me',"chr('\\1')",$Return);

    und ersetze mit:

    Code: PHP  [Auswählen]
      //return preg_replace ( '/&#(\d+);/me',"chr('\\1')",$Return);
    if (strnatcmp(phpversion(),'5.5') >= 0)  {
            return preg_replace_callback('/&#(\d+);/m', function($m){
                    return chr($m[1]);
            }, $Return);
    } else {
            return preg_replace_callback( '/&#(\d+);/me',"chr('\\1')",$Return);
    }      

    Gruß Ralph

    toppi

    • Viel Schreiber
    • Beiträge: 651
    @Ralph_84
    Danke :-)

    Ich habe nebenbei auch im Forum noch einen anderen Beitrag dazu gefunden: Deprecated: in Metatags.php

    Jetzt läuft es mit PHP 5.5 :-)

    ralph_84

    • Fördermitglied
    • Beiträge: 499
    • Geschlecht:
    Hallo toppi
    Schön wenn es jetzt geht.
    Gruß Ralph

    viza

    • Mitglied
    • Beiträge: 113
    • Geschlecht:
    noch ein kleiner Nachtrag zur class.input.filter:

    Dort existiert in der Funktion "decode" ja noch ein 2. Aufruf des preg_replace mit e-Modifier:

    Code: PHP  [Auswählen]
    // convert hex
       $source = preg_replace('/&#x([a-f0-9]+);/mei', "chr(0x\\1)", $source); // hex notation

    Sollte man dann auch in preg_replace_callback wandeln:

    Code: PHP  [Auswählen]
       $source = preg_replace_callback('/&#x([a-f0-9]+);/mi',create_function('$m','return chr("0x".$m[1]);'),$source);

     8-)
    VG
               
    anything