BBcode extern in html wandeln

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.
Benutzeravatar
Root007
Mitglied
Beiträge: 260
Registriert: 14.12.2002 08:13

Beitrag von Root007 »

So, ich versuch nun schon alles mögliche... Auch wenn ich nicht alles nachvollziehen kann :roll:

Und leider hab ich immer noch Probleme:

Code: Alles auswählen

$post_text = preg_replace('!\[((size)=[0-9]:[a-z0-9]+)\](.*)\[/\1\]!i','<b>\3</b>',$post_text);
gibt mir z.b. sowas aus:
[size=24:c94942fa8b]TEXT-TEXT[/size:c94942fa8b]
Wobei der TEXT-TEXT ja tatsächlich fett dargestellt wird (Größe verändern will ich grad nicht), nur sind die bbcode-Tags noch da - warum werden die noch angezeigt?

Das nächste: Mit

Code: Alles auswählen

	$post_text = preg_replace('!\[((list):[a-z0-9]+)\]!i','',$post_text);
	$post_text = preg_replace('!\[/((list):[a-z0-9]+)\]!i','',$post_text);
lösch ich die Start- und End-Tags von list - was so auch funktioniert. Die jeweiligen Listenpunkte würd ich nun gern durch ein Pfeil ersetzen. Wie folgt geht es leider nicht:

Code: Alles auswählen

$post_text = preg_replace('!\[/((*):[a-z0-9]+)\]!i','&rarr;',$post_text);

oder

$post_text = str_replace('!\[*:$uid]!i', '&rarr;', $post_text);

Mit dem Zitieren hab ich demnach ebenfalls ein Problem:

Code: Alles auswählen

$post_text = preg_replace('!\[((quote):[a-z0-9]="(.*)"+)\]!i','<b>\2 hat geschrieben:</b><br />',$post_text);
	$post_text = preg_replace('!\[/((quote):[a-z0-9]+)\]!i','',$post_text);
Hier passiert gar nichts.

URLs zu ersetzen ist da kein Problem, da die $uid's da nicht dabei sind.

Ich hab wiegesagt schon viel rumprobiert, aber verstanden hab ich diese "Zeichen" für str_ und preg_replace meistens nicht. Und das php-Manual ist für mich irgendwie auch net ausführlich genug.

Wer sich diesen Stand ansehen will, die test.php gibts noch (der graue Text ist vor der bbcode Bearbeitung, der schwarze danach).

Ich freu mich echt über jeden Tipp!

Gruß
Benutzeravatar
MrMind
Mitglied
Beiträge: 464
Registriert: 29.11.2003 17:14
Wohnort: Darmstadt/Odw
Kontaktdaten:

Beitrag von MrMind »

Root007 hat geschrieben:

Code: Alles auswählen

$post_text = preg_replace('!\[((size)=[0-9]:[a-z0-9]+)\](.*)\[/\1\]!i','<b>\3</b>',$post_text);
Haste mal mit \\3 versucht???

Mfg
MrMind
Selbst ist der Coder
Coder unter Linux
Benutzeravatar
Root007
Mitglied
Beiträge: 260
Registriert: 14.12.2002 08:13

Beitrag von Root007 »

Hi,

mit ner Antwort hätt ich hier nicht mehr gerechnet...

Ja, mit \\3 hatte ich es auch schon versucht - hat aber ebenfalls nicht geklappt.

Aber ich ersetz jetzt Anfang und Ende getrennt (und unabhängig) - und so gehts hervorragend.

Sind zwar jedesmal dann zwei Anweisungen aber macht ja nix - auf die Laufzeit kommts mir (jedenfalls bis jetzt) nicht so an.

Trotzdem danke! :)

Greetz
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

Root damit wirds besser ersichtlich:

http://pcre.nophia.de/evaluate/index.ph ... 72671966b0
Benutzeravatar
Root007
Mitglied
Beiträge: 260
Registriert: 14.12.2002 08:13

Beitrag von Root007 »

@Blutgerinsel: Boaaaaah - SUPER!!! Genau sowas hab ich schon immer gesucht! :)

Tausend Dank!! :grin:
Benutzeravatar
Root007
Mitglied
Beiträge: 260
Registriert: 14.12.2002 08:13

Beitrag von Root007 »

Eine letzte Interessensfrage hätte ich noch: Die Ersetzung klappt jetzt auch mit je einer Codezeile. Ich "spar" dadurch sechs Zeilen ein.

Was ist jetzt "besser" bzw. was geht schneller und für den Server schonender?

Die Zeit zum Generieren mess ich grad, allerdings schwankt die eh ziemlich, so dass ich daran nicht wirklich einen Unterschied merke. Heißt das jetzt, dass es für den Server "egal" ist, ob ich jetzt (lächerliche) 6 Zeilen mehr oder weniger hab?

Thx
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

Root007 hat geschrieben:Eine letzte Interessensfrage hätte ich noch: Die Ersetzung klappt jetzt auch mit je einer Codezeile. Ich "spar" dadurch sechs Zeilen ein.

Was ist jetzt "besser" bzw. was geht schneller und für den Server schonender?

Die Zeit zum Generieren mess ich grad, allerdings schwankt die eh ziemlich, so dass ich daran nicht wirklich einen Unterschied merke. Heißt das jetzt, dass es für den Server "egal" ist, ob ich jetzt (lächerliche) 6 Zeilen mehr oder weniger hab?

Thx
Nunja von den Templates her was ich u.A. auch eines zurzeit mache kann ich sagen das. str_replace bei einfachen Ersetzungen am schnellsten agiert. Bei komplexen Codeblöcken oder Schleifen etc. gewinnt preg_replace an Speed. Wobei man auch die veralteten ereg_replace manchmal etwas schneller sind aber eigentlich nicht mehr verwendet werden sollen.

Daher nutze ich eine Kombination aus preg_match_all und str_replace und das geht sehr schnell.....

Zur Zeitmessung du ermittelst schon via microtime(); welches du anhand des Leerzeichens zwischen Datetime und Timestamp zusammenaddierst die microtime(); ?
Normal schwankt das nicht so stark wie es sich jetzt nach deinen Worten anhört.....Durchschnittswert ermitteln wäre ein besserer Vergleichswert
Benutzeravatar
Root007
Mitglied
Beiträge: 260
Registriert: 14.12.2002 08:13

Beitrag von Root007 »

Um die Laufzeit zu ermitteln hab ich den Vorschlag vom PHP Manual: microtime genommen.
Blutgerinsel hat geschrieben:Normal schwankt das nicht so stark wie es sich jetzt nach deinen Worten anhört....
Hm, ok - ich hab da wahrscheinlich "etwas" übertrieben :roll: , im Normalfall liegt die Zeit bei 0,08 sec, manchmal gehts auch bis 0,4 sec hoch.

Ist diese Zeit akzeptabel?
Antworten

Zurück zu „Coding & Technik“