• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

preg_replace Fragezeichen Problem

Rayse

Mitglied
Moin Leute.

Ich hab hier nen Problem mit preg_replace und komm partout nicht weiter.

Ich hab folgende kleine preg_replace Anweisung um aus nem BBCode eine URL zu formen:

PHP:
// [url=http://www.example.com]Text[/url]
    $s = preg_replace(
        "/\[url=([^()<>\s]+?)\](.+?)\[\/url\]/i",
        "<a href=\"\\1\">\\2</a>", $s);
Funktioniert auch wunderbar.

Jedoch möchte ich jetzt das die URL zusätzlich über anonym.to geleitet wird.

Im Grunde ganz simpel, habs so gemacht:

PHP:
    $s = preg_replace(
        "/\[url=([^()<>\s]+?)\](.+?)\[\/url\]/i",
        "<a href=\"http://anonym.to\?\\1\">\\2</a>", $s);
Allerdings funktioniert das mit dem ? nach anonym.to einfach nicht. Ohne Fragezeichen gehts, mit jedoch nicht. Wobei doch das Fragezeichen mit dem Backslash davor eigentlich funktionieren müsste oder nicht?

Vielleicht hat ja jemand ne Idee.

Gruß Rayse
 
Werbung:
Ja, das sollte eigentlich funktionieren. Wie sieht die Ausgabe im Quellcode bei der scheinbar problematischen Schreibweise aus?
 
Mit Fragezeichen sieht es so aus:
Code:
[URL="http://anonym.to%5c/?%3Ca%20href="]http://www.test.de"[/URL]>url titel
bzw.
HTML:
<a href="http://anonym.to%5C?%3Ca%20href=" http:="" url titel="">http://www.test.de"</a>
 
Werbung:
Es gibt keine Escapesequenz \? in PHP-Strings. Du brauchst dort nicht zu escapen. Die Ausgabe sieht dennoch etwas seltsam aus.
 
Nur mit ? gehts halt auch nicht, Ausgabe sieht fast identisch aus. Hängt womöglich mit dem Script bzw. der Umgebung zusammen in der dieser Code ausgeführt wird. In einem lokalen Test Script funktionierts nämlich so. Blöd, werd ich wohl bisschen suchen müssen bis ich den Fehler hab...
 
Ist das oben dein richtiger Code?

Wieso setzt du die gematchten Gruppen mit \\1 bzw. \\2 ein? Geht das überhaupt? (Ich kenns nur mit $ statt \\, und meine versuche mit \\ sind fehlgeschlagen...)

Zeig doch bitte nochmal den kompletten Code mit Text, der bearbeitet wird ^^
 
Werbung:
FYI

replacement may contain references of the form \\n or (since PHP 4.0.4) $n, with the latter form being the preferred one. Every such reference will be replaced by the text captured by the n'th parenthesized pattern. n can be from 0 to 99, and \\0 or $0 refers to the text matched by the whole pattern. Opening parentheses are counted from left to right (starting from 1) to obtain the number of the capturing subpattern.

- PHP: preg_replace - Manual
 
Zurück
Oben