Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] preg_replace /e-Modifier

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] preg_replace /e-Modifier

    Hallo,

    in meinem Symfony-Projekt (aus dem 1.x Tutorial) habe ich folgenden Code

    PHP-Code:
    public static function pregtr($search$replacePairs)
    {
        return 
    preg_replace(array_keys($replacePairs), array_values($replacePairs), 
                                   
    $search);

    welcher irgendwann zu der Fehlermeldung

    "The /e modifier is deprecated, use preg_replace_callback instead in ..." führt.

    Da ich kompletter php-Anfänger bin, würde ich gerne in Erfahrung bringen, wie ich diese Code-Stelle am besten abändern kann, so dass die Fehlermeldung verschwindet. Mit der "callback"-Variante habe ich es auch schon versucht, aber irgendwie weiss ich hier nicht genau, wie der callback aussehen soll.


  • #2
    Steht doch genau in der Fehlermeldung, wie du es behebst. Wenn du garkeinen Callback nutzt ist der Modifier auch sinnlos.
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Ich verstehe deine Antwort leider nicht, tut mir leid!
      Kann mir jemand einen Callback vorschlagen?

      Kommentar


      • #4
        Das hier funktioniert nicht

        PHP-Code:
        public static function pregtr($search$replacePairs)
          {
            
        $callback = function($treffer) use($replacePairs){        
              return 
        array_values($replacePairs);
            };
            return 
        preg_replace_callback(array_keys($replacePairs), $callback$search);
          } 

        Kommentar


        • #5
          Der Fehler kommt zwar in den obigen Codezeilen zum tragen, hat aber seine Ursache in einen oder mehreren Arrayelementen von $replacePairs. Gib das array mal mit var_dump aus, um zu sehen, was gemacht wird.
          PHP-Klassen auf github

          Kommentar


          • #6
            Das Problem tritt auf, wenn ich auf meiner Webseite einen link anklicke. Danach erscheint eine Seite

            Objekt nicht gefunden!

            Der angeforderte URL konnte auf dem Server nicht gefunden werden. Der Link auf der verweisenden Seite scheint falsch oder nicht mehr aktuell zu sein. Bitte informieren Sie den Autor dieser Seite über den Fehler.

            Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.
            Error 404
            localhost
            Apache/2.4.10 (Win32) OpenSSL/1.0.1i PHP/5.5.15
            Die Fehlermeldung erscheint in der URL (leider kann ich das hier nicht so kopieren wie es in der URL-Leiste steht):

            Will ich das $replacePairs nun mit var_dump ausgeben (also mit echo) wird dies nicht angezeigt, sondern nur die Errorpage.

            Kommentar


            • #7
              http://php-de.github.io/#debugging

              Kommentar


              • #8
                Will ich das $replacePairs nun mit var_dump ausgeben (also mit echo)
                Nein, mit var_dump.

                Kannst mal testweise hinter die var_dump-Zeile dann ein exit; setzen. Wenn dann immer noch nichts kommt, kannst du es auch mit einem Output-Buffer umrahmen und in eine temporäre Debug-Datei wegspeichern.

                PHP-Code:
                ob_start();
                var_dump($replacePairs);
                file_put_contents($someFileob_get_clean()); 
                Es liegt zumindest daran, dass da irgendwer ein Pattern übergibt, das eben den e-Pattern-Modifier nutzt. Es könnte etwas knifflig werden, das umzuschreiben. Wahrscheinlich müsstest du es so lösen, dass die Klassenmethode an der Stelle gar nicht aufgerufen wird und du stattdessen mit preg_replace_callback arbeitest.

                Wenn das jetzt aber eh nur ein Tutorial ist, dessen Code du nicht später weiterverwenden willst, und es sich nicht um einen wesentlichen Aspekt handelt, kannst du vermutlich auch just ein @ vor das preg_replace setzen. Ist natürlich nicht die feine Art, aber dann sollte Ruhe sein an der Stelle.

                Kommentar


                • #9
                  Vielen Dank mermshaus!
                  Das mit dem @ reicht mir, mein Problem war ja gerade, dass ich mit dem Tutorial nicht vorankam.

                  Kommentar


                  • #10
                    Zitat von ghafghjr Beitrag anzeigen
                    Vielen Dank mermshaus!
                    Das mit dem @ reicht mir, mein Problem war ja gerade, dass ich mit dem Tutorial nicht vorankam.

                    In so einem Fall wäre Tutorial wechseln auch hilfreich, Symfony bietet auch ein super Buch.
                    Zitat von nikosch
                    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                    Kommentar

                    Lädt...
                    X