probleme mit ereg_replace

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
Shadowman
Mitglied
Beiträge: 170
Registriert: 16.12.2003 19:01
Wohnort: Vaterstetten

probleme mit ereg_replace

Beitrag 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 ?
Proud Admin & Webmaster of http://www.broxx-com.de
Jensemann
Ehemaliges Teammitglied
Beiträge: 2549
Registriert: 25.02.2002 01:00

Beitrag 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).
Benutzeravatar
Shadowman
Mitglied
Beiträge: 170
Registriert: 16.12.2003 19:01
Wohnort: Vaterstetten

Beitrag 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? :oops:
Proud Admin & Webmaster of http://www.broxx-com.de
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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 :roll: . 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? :oops:
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 )
Benutzeravatar
Shadowman
Mitglied
Beiträge: 170
Registriert: 16.12.2003 19:01
Wohnort: Vaterstetten

Beitrag 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 :oops:
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 :)
Proud Admin & Webmaster of http://www.broxx-com.de
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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...
Benutzeravatar
Shadowman
Mitglied
Beiträge: 170
Registriert: 16.12.2003 19:01
Wohnort: Vaterstetten

Beitrag von Shadowman »

ähm, ganz einfach, weil ich sie nicht kannte, bis jetzt *g
Proud Admin & Webmaster of http://www.broxx-com.de
Jensemann
Ehemaliges Teammitglied
Beiträge: 2549
Registriert: 25.02.2002 01:00

Beitrag 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 :roll: . 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 :)
Antworten

Zurück zu „Coding & Technik“