preg_replace ersetzt alle Vorkommen und nicht nur eins.

Johnnii360

Erfahrenes Mitglied
Gott zum Gruße! :)

Wie gestern mit jQuery, stehe ich heute mit preg_replace bzw. RegEx vor einem Problem. Habe bisher schon viele Kombis ausprobiert und auch diese div. RegEx-Helper im Netz, die einen live alles anzeigen, haben zwar Erfolg gezeigt in der Praxis im Script aber eher nicht ganz.

Ich hab hier einen String, also ein Feld, das ich aus der MySQL auslesen (Links). In diesem befinden sich mehrere Einträge im Textformat mit Returns (\n [nicht als Reintext!]). Mit einem Script lese ich eine spezifische Zeile aus, die dann im gesamten Text gesucht und ersetzt werden soll. Funktioniert soweit ganz gut. Allerdings habe ich z.B. beim Benutzernamen (inkl. Domain) öfters die selben, woraufhin das Script Backslash-Ping-Pong spielt.

Aufbau des Textes im Feld "Links":
Code:
Linkname1|foo.bar|Beschreibung1|domäne\benutzername
Linkname2|foo2.bar|Beschreibung2|domänebenutzername
Linkname3|foo3.bar|Beschreibung3|domänebenutzername

Scriptschnipsel:
PHP:
$EditedText = preg_replace("/(".preg_quote($Entries[$Key]).")/", preg_quote($ImplodeString), $GetEntries['uis']);
  • $Entries[$Key] = Spezifische Zeile des mit \n explodeten Arrays.
  • $ImplodeString = Die neue Zeile, die mit der alten getauscht werden soll.
  • $GetEntries['uis'] = Der ganze Textschnodder mit den Links.
  • preg_quote() soll die | und . ja mit einem \ quoten.

Ich habe bei Linkname 2 und 3 jetzt hier bewusst die Backslashes zwischen domäne und benutzername weggelassen. DENN, wenn ich jetzt z.B. bei Linkname2 den Backslash zwischen domäne und benutzername setze, dann verschwindet er bei Linkname1 - das Ganze auch umgekehrt.

Irgendwie bekomm ich's einfach net hin. Würde mich daher über Eure Hilfe sehr freuen.

Vielen Dank schon mal im Voraus! :)
 
Zuletzt bearbeitet:
Doch, doch, das tut er. Es geht auch eigentlich um domäne und benutzername.

Edit: Ach ja, hatte vorher den Usernamen mit mysql_real_escape_string() übergeben ($_POST) und nun nicht mehr. Jetzt geht gar nichts mehr. xD

Edit 2: Vergesst die Sache einfach. Ich mach einfach eine neue Tabelle auf. Konnte mich so einigen. :)
 
Zuletzt bearbeitet:
Zurück