Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Mit PHP Links parsen (https://www.delphipraxis.net/87607-mit-php-links-parsen.html)

Matze 2. Mär 2007 22:35


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:
$text = preg_replace("/\[url=(.*?)\](.*?)\[\/url\]/sie", "generate_url('\\1','\\2')", $text);
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:

Code:
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;
}
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

Code:
[url=www.foobar.net]Wuppdi[/url]
[img]http://www.foobar.de/blubb.png[/img]
Das gibt sonst natürlich ein Tag-Chaos, doch wie löse ich das Problem?

omata 2. Mär 2007 22:45

Re: Mit PHP Links parsen
 
war blödsinn...

Matze 4. Mär 2007 22:43

Re: Mit PHP Links parsen
 
*wuppdi* :)

yankee 5. Mär 2007 07:04

Re: Mit PHP Links parsen
 
Wenn du dir gerade einen bbcode-parser schreibst, hilft dir vielleicht auch meiner:

http://www.delphipraxis.net/internal...t.php?t=100810

r2c2 5. Mär 2007 13:51

Re: Mit PHP Links parsen
 
Zitat:

Zitat von Matze
Das gibt sonst natürlich ein Tag-Chaos, doch wie löse ich das Problem?

Ich würd sagen über die richtige Reihenfolge. Zuerst mit Tags dann ohne...

mfg

Christian

Matze 5. Mär 2007 14:04

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:
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]
Umgekehrt:

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>

r2c2 5. Mär 2007 14:33

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:
'#\[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',
mfg

Christian

annonyme 5. Mär 2007 14:43

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);

r2c2 5. Mär 2007 15:09

Re: Mit PHP Links parsen
 
Zitat:

Zitat von annonyme
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);

Geht IMHO nicht, wenn der Link als erstes oder letztes steht... Das muss auch noch abgefangen werden und dann sind wir fast wieder bei meinem regexp... Oder hab ich da was verpeilt?

mfg

Christian

annonyme 5. Mär 2007 15:26

Re: Mit PHP Links parsen
 
Zitat:

Zitat von r2c2
Geht IMHO nicht, wenn der Link als erstes oder letztes steht... Das muss auch noch abgefangen werden und dann sind wir fast wieder bei meinem regexp... Oder hab ich da was verpeilt?

ja... daran hatte ich nicht gedacht... die beiden regex wären dann auf jedenfall sehr ähnlich

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