Seite 1 von 1
probleme mit ereg_replace
Verfasst: 18.06.2004 21:17
von Shadowman
Code: Alles auswählen
$message[$i] = ereg_replace("([img])(*)([/img])", "<img src=\" \\2 \">", $message[$i]);
das will einfach nicht funktionieren
zur erklärung: ich möchte [img]url%20des%20bildes[/img] mit <img src="url des bildes"> ersetzen.
nur irgendwie funzt das nicht, kann mir vlt einer sagen was ich falsch mache?
danke schonmal im vorraus
EDIT: Mir ist aufgefallen, dass phpbb noch aus einem mir unergründlichen grund ne nummer nach dem [img reinmacht, wie kann ich dann in der such funktion nen platzhalter eingeben?
also dass nur z.b. nach [img: und [/img: gesucht wird, und diese zig ziffern beliebig lauten können ?
Verfasst: 19.06.2004 15:59
von Jensemann
Beim regex kann ich dir nicht helfen, aber bei 2 andern Dingen:
1. Nimm besser preg_replace anstatt ereg_replace.
Siehe auch
http://www.dclp-faq.de/q/q-regexp-ereg.html
2. Die Zahl von der du sprichst ist die bbcode_uid, diese wird auch bei andern BBcodes eingebaut, diese ist notwendig wenn ein gequoteter Bereich bbcode enthällt (wenn ich mich jetzt richtig erinnere).
Verfasst: 19.06.2004 18:12
von Shadowman
Danke für die Antwort, ich werde das gleich mal ausprobieren.
Zu zweitens: Wie kann ich denn nun meine Replace funktion ändern, dass er auch mit dem Zahlencode funktioniert?
Wenn ich wüsste in welchem bereich sich der Code befindet, könnte ich das ganze mit einer Schleife lösen, aber was wenn nicht?
Wie wurde das ganze denn mit phpbb gelöst? Ich habe schon teilbruchstücke des bbcodes gefunden, nur leider reichen meine Kenntnisse nicht, um alles zu verstehen.
Evtl kann mich da einer aufklären
EDIT:
Code: Alles auswählen
$message[$i] = preg_replace("[img:b6f34207ae]", "<img src='", $message[$i]);
$message[$i] = preg_replace("[/img:b6f34207ae]", "'>", $message[$i]);
Wenn ich das auf diesen Text
anwende, kommt das hier heraus:
Was mache ich nun schon wieder falsch?

Verfasst: 19.06.2004 23:18
von Pyramide
jensemann hat geschrieben:diese ist notwendig wenn ein gequoteter Bereich bbcode enthällt (wenn ich mich jetzt richtig erinnere).
Du erinnerst dich nicht richtig

. Die bbcode_uid dient dazu, daß das aufwändige durchsuchen mittels preg_replace nur einmal (beim Erstellen des Beitrags) durchgeführt werden muss und später das schnellere str_replace verwendet werden kann. Beispiel:
Code: Alles auswählen
$text = preg_replace("#\[b\](.*?)\[/b\]#si", "[b:$uid]\\1[/b:$uid]", $text);
und
Code: Alles auswählen
$text = str_replace("[b:$uid]", $bbcode_tpl['b_open'], $text);
$text = str_replace("[/b:$uid]", $bbcode_tpl['b_close'], $text);
Shadowman hat geschrieben:Code: Alles auswählen
$message[$i] = preg_replace("[img:b6f34207ae]", "<img src='", $message[$i]);
$message[$i] = preg_replace("[/img:b6f34207ae]", "'>", $message[$i]);
Wenn ich das auf diesen Text
anwende, kommt das hier heraus:
Was mache ich nun schon wieder falsch?

Mit [...] definierst du eine "character class":
http://de.php.net/manual/de/pcre.patter ... rebrackets
Code: Alles auswählen
$blub = preg_replace("#\\[img\\](.*?)\\[/img\\]#", '<img src="\\1">', $blub);
Wichtig ist, daß du
.*? anstatt
.* verwendest (bzw. den ungreedy-Modifikator
u verwendest), damit der Ausdruck bei mehreren vorkommen auch mehrere Ergebnisse findet (siehe auch
http://www.dclp-faq.de/q/q-regexp-gierig.html )
Verfasst: 20.06.2004 00:35
von Shadowman
Code: Alles auswählen
$message[$i] = preg_replace("#\\[img\\](.*?)\\[/img\\]#", '<img src="\\1">', $message[$i]);
Es ändert immer noch nicht das [url:xyz] in <img src=... um, liegt das evtl daran, dass bei mir in $message[$i] ein mehrzeiliger text vorhanden ist?
EDIT:
Ich habe mir noch einmal die Anleitung zu preg_replace durchgelesen, doch leider Blicke ich bei den Modifier nicht durch
Gibt es eine Seite wo das gut erklärt ist?
EDIT2: Ich hab nun endlich herrausgefunden, dass der Code sich auf [img] auswirkt. Doch leider muss ich Austräge aus der Datenbank von phpbb auslesen. Deswegen muss auch [img:xyz] umgewandelt werden.
Da ich noch am lernen der preg_replace(); funktion bin, verstehe ich noch nicht alle Modifier, wie kann ich nun eine replace funktion bauen, die nach[img:xyz] sucht, und dieses dann mit <img src=.. ersetzt?
Ich freue mich natürlich über jede Antwort

Verfasst: 20.06.2004 15:49
von Pyramide
Code: Alles auswählen
$blub = preg_replace('#\\[img:([a-z0-9]+)\\](.*?)\\[/img:\\1\\]#', '<img src="\\2">', $blub);
Aber wieso verwendest du nicht einfach die Funkiton bbencode_second_pass? Die erledigt doch alles für dich...
Verfasst: 20.06.2004 16:52
von Shadowman
ähm, ganz einfach, weil ich sie nicht kannte, bis jetzt *g
Verfasst: 21.06.2004 00:03
von Jensemann
Pyramide hat geschrieben:jensemann hat geschrieben:diese ist notwendig wenn ein gequoteter Bereich bbcode enthällt (wenn ich mich jetzt richtig erinnere).
Du erinnerst dich nicht richtig

. Die bbcode_uid dient dazu, daß das aufwändige durchsuchen mittels preg_replace nur einmal (beim Erstellen des Beitrags) durchgeführt werden muss und später das schnellere str_replace verwendet werden kann.
Oops, thx. Naja, is auch schon was her das ich mich mit phpBB beschäftigt hab
