preg_replace mit urlencode
bert
- php
Abend,
habe für meine auto-replace funktion folgende Ersetzungsregel erstellt:
$search_for[] = '/href\=\"(.*)\"/iU';
$replace_with[] = 'href="'.urlencode(.'"\1"'.).'"';
Also alle Links sollen einfach automatisch mit urlencode codiert werden.
Leider funktioniert diese Regel nicht.
Auch alle anderen Varianten von '.urlencode(.'\1'.).', '.urlencode(\1).' und viele mehr funktionieren nicht.
Kann mir jemand sagen, wie die Syntax richtig ist?
Danke und Gruß
Kann mir jemand sagen, wie die Syntax richtig ist?
Du speicherst eine RE bzw eine Ersetzung in einer Variable.
Du willst \1 übergeben. Also ein \ und eine 1. Du willst nicht die 1 maskieren, Sondern du willst den Slash maskieren. Also \1
Aber eigentlich soltest du mit einer Callback Funktion arbeiten.
mfg Beat
Danke!
Du speicherst eine RE bzw eine Ersetzung in einer Variable.
Du willst \1 übergeben. Also ein \ und eine 1. Du willst nicht die 1 maskieren, Sondern du willst den Slash maskieren. Also \1
Wenn ich
$search_for[] = '/href\=\"(.*)\"/iU';
$replace_with[] = 'href="'.urlencode(.'"\\1"'.).'"';
schreibe wird die Seite nicht geladen
ebenso bei $replace_with[] = 'href="'.urlencode(.'\\1'.).'"';
$replace_with[] = 'href="'.urlencode(\\1).'"';
erzeugt einen Link zur Seite "1".
Muss also noch irgendwo einen Denkfehler haben. Kannst du mir sagen wo?
Hi,
Wenn ich [...]
schreibe wird die Seite nicht geladen
Muss also noch irgendwo einen Denkfehler haben. Kannst du mir sagen wo?
An der Stelle, wo du „Seite wird nicht geladen” für eine brauchbare Problembeschreibung hältst.
MfG ChrisB
Hi!
habe für meine auto-replace funktion folgende Ersetzungsregel erstellt:
$search_for[] = '/href="(.*)"/iU';
$replace_with[] = 'href="'.urlencode(.'"\1"'.).'"';
Das kann so nicht gehen, da urlencode() sofort aufgerufen würde und dessen Ergebnis in $replace\_with[] landete, wenn du es ohne Syntax-Fehler schreiben könntest. Du willst hingegen, dass das urlencode erst später auf den ermittelten Wert angewendet wird. Dann musst du es auch erst später ausführen lassen. Die beste Methode dafür ist [preg_replace_callback()](http://de.php.net/manual/en/function.preg-replace-callback.php). Eine andere ist der [Modifizierer](http://de.php.net/manual/en/reference.pcre.pattern.modifiers.php) e, jedoch solltest du dazu das Handbuch lesen und darauf achten, dass dadurch kein ungewollter Code ausgeführt wird.
Obendrein ist die Schreibweise \\n seit Version 4.0.4 nicht mehr die bevorzugte, sondern $n.
Lo!