![]() |
[PHP]preg_replace und UBB-Tags....
HAllo,
ich plage mich den regulären Ausdrücken und mit der PHP-Funktion preg_replace herum. Sinn ist es, einen kleinen Parser zu schreiben, der mir UBB-Tags wie hier im Forum durch HTML-Tags ersetzt. Das klappt auch super ;-). Allerdings will ich auch, wenn kein [URL]-Tag vorhanden ist, dass eine URL die mit http:// anfängt geparst wird. Das ist allerdnigs schwieriger als man denkt, da schon umgewandelter Code nochmal umgewandelt wird. Hier mal der Source:
Code:
Wie gesagt: Beim letzten fehlen mir Ideen wie ich das parsen könnte. Könnt ihr mir helfen?
/* [url]http;//www.ttt.de[/url] */
$text = preg_replace("/\[url\]http:\/\/(.*?)\[\/url\]/si", "[url="http://\\1"]http://\\1[/url]", $text); /* [url]www.ttt.de[/url] */ $text = preg_replace("/\[url\](.*?)\[\/url\]/si", "[url="http://\\1"]http://\\1[/url]", $text); /* [url]http://www.ttt.de[/url] */ $text = preg_replace("/\[url=www(.*?)\](.*?)\[\/url\]/si", "[url="http://www\\1"]\\2[/url]", $text); /* [url=http://www.test.de]test[/url] */ $text = preg_replace("/\[url=(.*?)\](.*?)\[\/url\]/si", "[url="\\1"]\\2[/url]", $text); /* [url]http://www.tset.de[/url] (ohne url-tag) */ $text = preg_replace("/\[^\]]http:\/\/(.*?)[^x] /si", "[url="\\1"]\\2[/url]", $text); |
Re: [PHP]preg_replace und UBB-Tags....
Hi!
Versuch doch einfach beim parsen des URL-Tags eine Flag zu setzen, sodass das nachfolgende parsen der URL übergangen wird. Ciao fkerber |
Re: [PHP]preg_replace und UBB-Tags....
Ich versteh nicht ganz, wie mir dieser Flag nützen soll..
Kannst du deine Idee mal etwas genauer darstellen? |
Re: [PHP]preg_replace und UBB-Tags....
Wenn du zuerst nach adressen ohne [URL] suchst und die in umwandelst und dann nach [URL] dürfte es doch keine Probleme geben oder?
ciao, moin339 |
Re: [PHP]preg_replace und UBB-Tags....
Hi!
Meine Idee war, du stellst fest, wenn du einen [URL]-Tag findest, in Zeile X, Position Y ist ein bereits geparster URL-String mit Hyperlink. Taucht diese Position dann beim späteren parsen der Url an sich wieder auf, wird sie übergangen. Prinzipiell müsste aber auch moin339s Vorschlag gehen, indem du einfach alle URL-Tags löscht und dann direkt nach den Links suchst. Diese Methode stellt wiederum die Existenz des [URL]-Tags in Frage, den ich hier im Forum zum Beispiel auch nie nutze, da es ja auch automatisch geht. Ansonsten (also Original Vorschlag von moin339) würden sie auch doppelt geparst:
Code:
Oder verstehe ich da etwas falsch?
[.URL]http://www.test.de[./URL]
-->[.URL]<a href="http://www.test.de>aaaa</a>[./URL] ==>[url="<a href="]aaaa[/url]>bbbb</a> Ciao fkerber |
Re: [PHP]preg_replace und UBB-Tags....
du kannst doch zuerst alle links die mit http anfangen ins html-format umwandeln, allerdings nur wenn davor kein [url] tag steht, und dann alle adressen umwandeln die in einem [url] tag stehen
das müsste doch egehen? ciao, moin339 P.S. du musst allerdings noch darauf achten, dass es auch solche url-links gibt: [.url=http://www.delphipraxis.net]DP[./url] |
Re: [PHP]preg_replace und UBB-Tags....
Zitat:
![]() Zitat:
Naja ich fummel ncoh ein wenig rum... Vielleicht fällt euch ja noch was ein. |
Re: [PHP]preg_replace und UBB-Tags....
Hoi alex,
wie wäre es, wenn du nur URLs ersetzt die danach ein Leerzeichen haben. Bei URL und fertigen Links usw. trifft das nicht zu da diese ja durch ein [/URL] oder </a> bzw " "beendet" werden. |
Re: [PHP]preg_replace und UBB-Tags....
Das wäre ne Idee, vielen Dank ich kucke mir das nachher nochmal an.
|
Re: [PHP]preg_replace und UBB-Tags....
Auf Leerzeichen prüfen geht auch nicht. Was ist wenn man eine URL in Klammern setzt? dann gehts wieder net ;)
Du kannst doch prüfen ob vor einer Adresse eine eckige Klammer oder ein Gleichheitszeichen steht, wenn nicht einfach in <a href=""> umwandeln. Als zweiten Schritt dann die Adressen vor denen eine Eckige Klammer oder ein Gleichheitszeichen steht umwandeln. Dann wird nix doppelt umgewandelt. ciao, moin339 P.S. such doch einfach mal bei google nach einem enstrechenden RegEx. Wenn du dort nix findest kannst du dir ja mal den Quellcode von phpBB ansehen. Du bist ja nicht der erste mit diesem Problem ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz