Sp33dy G0nz4l3s: str_replace Problem

Hi, ich habe ein Problem mit diesem Code:

  
//Links  
$muster = "|\[link\]([-_./a-zA-Z0-9äöüß !&%#?,'=:~]+)\[/link\]|i";  
$linkstring = "<a href=\"zubehoer.php?name=\$1&kategorie=Säfte\">\$1</a>";  
$row['beschreibung'] = preg_replace($muster, str_replace(" ", "_", $linkstring), $row['beschreibung']);  
///Links

Und zwar funktioniert das str_replace nicht. Kann man das so nicht machen?

Danke
Gruß Marc

  1. hi,

    Und zwar funktioniert das str_replace nicht.

    Und um diese Aussage zu untermauern, hast du welchen Test durchgeführt?

    Wenn ich mal kurz

    $linkstring = "<a href=\"zubehoer.php?name=\$1&kategorie=Säfte\">\$1</a>";  
    echo htmlspecialchars(str_replace(" ", "_", $linkstring));
    

    teste - erhalte ich im Browser die Anzeige:

    <a_href="zubehoer.php?name=$1&kategorie=Säfte">$1</a>

    Sollte das _nicht_ das sein, was du an dieser Stelle erwartest (und anders wäre eine Aussage "str_replace funktioniert nicht" ja wohl kaum begründbar) - dann beschreibe bitte, warum nicht.

    Andernfalls erkläre doch bitte, warum du wieder mal so ein Sch**ss-Posting absetzt, dessen Informationsgehalt in Bezug auf die Problembeschreibung gegen Null geht.

    Kann man das so nicht machen?

    Du hast uns - wieder einmal - noch nicht mal ansatzweise mitgeteilt, _was_ du "machen" willst ...

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Sorry wahsaga,
      ich dachte eigentlich das man str_replace einfach nicht in ein preg_replace schreiben darf.

      Deswegen hatte ich eigentlich nur mit einer Bestätigung gerechnet, das es nicht geht.

      Getestet habe ich es so:
      $1 ist ja dann das Ergebnis von von der Suche also z.B.

      Cream of Coconut

      Die Leerzeichen soll dann durch str_replace mit einem _ ersetzt werden. Das funktioniert aber leider nicht.

      Das Wort wird dann nicht einmal verlinkt. Lediglich [link] & [/link], das vor dem Wort steht, werden entfernt.

        
      //Links  
      $muster = "|\[link\]([-_./a-zA-Z0-9äöüß !&%#?,'=:~]+)\[/link\]|i";  
      $linkstring = "<a href=\"zubehoer.php?name=\$1&kategorie=Säfte\">\$1</a>";  
      $row['beschreibung'] = preg_replace($muster, str_replace(" ", "_", $linkstring), $row['beschreibung']);  
      ///Links  
      
      

      Danke für eure Hilfe

      1. hi,

        ich dachte eigentlich das man str_replace einfach nicht in ein preg_replace schreiben darf.

        preg_replace erwartet an dieser Stelle eine Zeichenkette (oder ein Array von Zeichenketten) als Parameter.

        Ob diese Zeichenkette jetzt als Textliteral dort steht, oder sich als Rückgabewert einer an der Stelle aufgerufenen Funktion "ergibt", ist selbstverständlich vollkommen-sowas-von-furzegal!

        Getestet habe ich es so:
        $1 ist ja dann das Ergebnis von von der Suche also z.B.

        Cream of Coconut

        Die Leerzeichen soll dann durch str_replace mit einem _ ersetzt werden. Das funktioniert aber leider nicht.

        Ähm ... du scheinst die Reihenfolge, in der die Funktionen ausgeführt werden, total missverstanden zu haben.

        _Zuerst_ wird das str_replace ausgeführt - das ersetzt Leerzeichen durch Unterstrich.

        _Dann_ wird diese bearbeitete Zeichenkette als Parameter für preg_replace benutzt.

        Das Wort wird dann nicht einmal verlinkt. Lediglich [link] & [/link], das vor dem Wort steht, werden entfernt.

        Lerne mal, sinnvoll und mit Verstand Problemanalyse zu betreiben.

        Wenn ich den Verdacht habe, str_replace könnte "nicht funzen" - dann teste ich das doch logischerweise erst mal separat.
        Wenn's dieses dann wieder erwarten doch tut - dann teste ich erst mal das preg_replace; und zwar nicht mit darin verschachteltem str_replace, sondern in dem ich wirklich erst mal nur eine statische Zeichenkette als Parameter nutze.

        Über mehrere solcher Einzelerkenntnisse kann man sich idR. langsam aber sicher der eigentlichen Problemquelle nähern - aber nicht, wenn man den Code zu sehr verschachtelt, so dass man nachher selber nicht mehr ganz durchsieht, und dann die Vermutungen, wo die Fehlerursache liegen könnte, schon fast zwangsläufig in die vollkommen falsche Richtung laufen ...

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hi,
          das habe ich falsch beschrieben: Das Wort wird nur dann nicht verlinkt, wenn str_replace davorsteht.

          Also liegt der Fehler bei str_replace. Nun habe ich str_replace an alle möglichen Stellen gesetzt, die mir einfielen...

          Leider hat der Browser diesen Befehl jedesmal einfach ignoriert und lediglich (wenn überhaupt) den Text in einen Link umgewandelt.

          Ich konnte aus deinem Post nicht ganz herauslesen ob du weißt warum es nicht geht. Falls du es weißt, wäre es sehr nett wenn du mir das noch einmal erklären könntest.

          Gruß Marc

          1. hi,

            das habe ich falsch beschrieben: Das Wort wird nur dann nicht verlinkt, wenn str_replace davorsteht.

            Dann muss es ja wohl an dem liegen, was du per str_replace aus der Zeichenkette _machst_.

            Also liegt der Fehler bei str_replace. Nun habe ich str_replace an alle möglichen Stellen gesetzt, die mir einfielen...

            Wenn das str_replace aus der Zeichenkette eine macht, auf die dein Suchausdruck nicht mehr zutrifft - dann untersuche, _warum_.

            Ich konnte aus deinem Post nicht ganz herauslesen ob du weißt warum es nicht geht. Falls du es weißt, wäre es sehr nett wenn du mir das noch einmal erklären könntest.

            Ich habe versucht dir zu erklären, wie ich mir eine halbwegs sinnvolle Fehlersuche vorstelle.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }