![]() |
Mit PHP Links parsen
Hi,
auf meiner Webseite parse ich Links momentan nicht automatisch, sondern löse dies über einen noch nicht sehr guten BBCode-Parser:
Code:
Nun ist es so, dass In Kommentaren, die Benutzer schreiben, auch Links auftreten können. Es wäre schön, wenn diese Links auch anklickbar wären und mein Ansatz war dieser:
$text = preg_replace("/\[url=(.*?)\](.*?)\[\/url\]/sie", "generate_url('\\1','\\2')", $text);
Code:
Der erste reguläre Ausdruck ist für E-Mail-Adressen, also schaut euch den zweiten an. Das klappt soweit auch wunderbar, sofern nirgendwo etwas steht wie
function parse_links($text)
{ $text = preg_replace('#(.*)\@(.*)\.([^\s(\)<>"\']*)#', '[email="\\1@\\2.\\3"]\\1@\\2.\\3[/email]', $text); $text = preg_replace('=([^\s]*)(www.)([^\s(\)<>"\']*)=', '[url="http://\\2\\3"]\\2\\3[/url]', $text); return $text; }
Code:
Das gibt sonst natürlich ein Tag-Chaos, doch wie löse ich das Problem?
[url=www.foobar.net]Wuppdi[/url]
[img]http://www.foobar.de/blubb.png[/img] |
Re: Mit PHP Links parsen
war blödsinn...
|
Re: Mit PHP Links parsen
*wuppdi* :)
|
Re: Mit PHP Links parsen
Wenn du dir gerade einen bbcode-parser schreibst, hilft dir vielleicht auch meiner:
![]() |
Re: Mit PHP Links parsen
Zitat:
mfg Christian |
Re: Mit PHP Links parsen
@yankee: Das sehe ich mir mal an, danke.
@r2c2: Ne, das geht auch nicht. Beispiel: Erst "nackte" Links, dann BBCodes:
Code:
Umgekehrt:
1. [url]www.foobar.de[/url]
[url=www.blabla.net]bla[/url] 2. [url="www.foobar.de"]www.foobar.de[/url] [url=[url="www.blabla.net"]www.blabla.net[/url]]bla[/url]
Code:
1. [url]www.foobar.de[/url]
[url=www.blabla.net]bla[/url] 2. [url]www.foobar.de[/url] [url="www.blabla.net"]bla[/url] 3. [url="www.foobar.de"]www.foobar.de[/url] [url="<a href="]www.blabla.net[/url]">bla</a> |
Re: Mit PHP Links parsen
Achso. Da hab ich nicht dran gedacht. dann musst du einfach das abfangen, d.h. prüfen, was vorne dran ist. Entweder zuerst die "nackten" Links ==> prüfen, dass vorher kein " steht und dann mit Tags oder andersrum und dann darf kein '>' vorne dran stehen...
*grad mal guckt, wie bei mir is*
Code:
mfg
'#\[url\](.*)\[/url\]#Uis' => '[url="\1"]\1[/url]',
'#\[url=(.*)\](.*)\[/url\]#Uis' => '[url="\1"]\2[/url]', '#(^|[^"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm' => '\1[url="\2\3"]\2\3[/url]\4', Christian |
Re: Mit PHP Links parsen
ich verstehe nicht so ganz das problem... aber ich würde es so machen:
Code:
$text=preg_replace("/\s((http:\/\/)|(www.))(.+)\s/Uis"," <a href=\"http://$3$4\">http://$3$4</a> ",$text);
|
Re: Mit PHP Links parsen
Zitat:
mfg Christian |
Re: Mit PHP Links parsen
Zitat:
korregierte Version:
Code:
$text=preg_replace("/(^|\s)+((http:\/\/)|(www.))(.+)(\s|$)+/Uis"," <a href=\"http://$4$5\">http://$4$5</a> ",$text);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:46 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 by Thomas Breitkreuz