Hilfe - wer sieht den Fehler

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

  • Hilfe - wer sieht den Fehler

    Hallöchen,

    ich krieg noch einen zu viel, mein ereg_replace() funktioniert nicht! Sieht hier jemand einen Fehler?

    $body_url = "a href=\"".$https_root."index_sec.php4?id=".$page_url."\" target=\"_top\"";
    $body = ereg_replace($matches[0][$xi], $body_url, $body);

    Wenn ich $matches[0][$xi] ausgebe erhalte ich
    a href="home.php4?id=20"

    Dies kommt auch in $body vor. Aber wenn ich $body ausgebe hat er das nicht ersetzt.
    Liegt das vielleicht daran, dass ein Punkt oder die Anführungszeichen im String vorkommen?
    Wir kann ich das zum laufen bekommen?

    Grüße, Andi

  • #2
    verushc mal so:

    $body = ereg_replace($body_url,$matches[0][$xi], $body);

    Kommentar


    • #3
      Ne, es soll ja schon $matches[0][$xi] durch $body_url ersetzt werden.

      Wenn ich den Inhalt von $matches[0][$xi] ändere, z.B. nur auf "php4",
      dann ersetzt er mir richtig alle vorkommen von php4 durch den string in $body_url.
      Muss also was mit dem Inhalt von $matches[0][$xi] zu tun haben.

      Inhalt von $matches[0][$xi] = a href="home.php4?id=20"

      Kann sein, dass er das Fragezeichen nicht mag oder den Punkt oder die Anführungszeichen oder eben alles.
      Wie filter ich die raus?

      Grüße

      Kommentar


      • #4
        hast du statt php mal versuch "a href=\"home.php4?id=20\"" ersetzen zu lassen?

        Was passiert, wenn du das matches in "" setzt?

        mach mal direkt davor, bzw ein echo indem du matches ausgbist.

        Kommentar


        • #5
          OK, ich habs!

          Die Anführungszeichen und das Fragezeichen mag er nicht.
          Habe mir jetzt so geholfen:

          $string = ereg_replace("\"", "\\"."\"", $matches[0][$xi]); // setzt vor alle Anführungszeichen einen Backslash
          $string = ereg_replace("\?", "\\?", $string); // setzt vor alle Fragezeichen einen Backslash
          $body = ereg_replace($string, $body_url, $body);

          @TobiaZ: Das $matches[0][$xi] in "" macht er nicht, denkt dann wohl, dass das ein String ist und erkennt es nicht mehr als Array.

          Grüße & Dank, Andi

          Kommentar


          • #6
            jupp, mit den "" ist absicht, dass er denkt, dass die Var ein String ist.

            deswegen war es auch nur zweiter vorschlag.

            $string = ereg_replace("\"", "\\"."\"", $matches[0][$xi]); // setzt vor alle Anführungszeichen einen Backslash
            $string = ereg_replace("\?", "\\?", $string); // setzt vor alle Fragezeichen einen Backslash

            kannst du mit addslashes vereinfachen.

            Kommentar


            • #7
              Vereinfachen geht dann aber nur bei den Anführungszeichen, das Fragezeichen nimmt er nicht. Für den letzten ereg_replace brauch er das aber, weil er das ? sonst als regulären Ausgruck interpretiert.

              Gruß, Andi

              Kommentar

              Lädt...
              X