Huhu Experten,
bräuchte auch mal nen hint 
und zwar hab ich ein kleines Tool gebastelt, in dem ich nun gerne die Links auch klickbar gemacht hätte…
An und für sich würd ich ja auf diese eine Firefox Extention zurückgreifen, aber naja - FireFox 2.0 beta hat da noch nix funktionierendes und leider muss es auch für IE gehen.
Deswegen bräuchte ich den Code, um aus einem Text eine URL zu extrahieren und einen Link draus machen zu können…
Die Frage ist: Wie sollte man das am besten lösen?
so lange suchen bis entweder ein Umbruch oder ein Leerzeichen kommt?
was wäre dann aber mit den Links, in denen ein Leerzeichen ist?
Doch lieber mit [url] Tags arbeiten?
Habt ihr Vorschläge für mich?
Ich kenn mich mit den RegExp Sachen leider nicht so wirklich aus…
deswegen weiss ich nicht so recht, wie ich das machen sollte…
vor allem soll es ohne (www.) und mit http klickbar werden…
Vielen Dank
Munich
Huhu Experten,
bräuchte auch mal nen hint 
und zwar hab ich ein kleines Tool gebastelt, in dem ich nun
gerne die Links auch klickbar gemacht hätte…
An und für sich würd ich ja auf diese eine Firefox Extention
zurückgreifen, aber naja - FireFox 2.0 beta hat da noch nix
funktionierendes und leider muss es auch für IE gehen.
Hä? Also irgendwie kapier ich das grad nit.
Was hat der Browser mit PHP zu tuen?
Wenn man in einem Text Links ausführen will, die keine sind(also ne URL in reiner Textform), kann ich dir nur Opera 9 empfehlen.
Wenn das ganze Serverseitg sein soll ist PHP klar das richtige.
Also der Reihe nach:
-
Wo steht ein Link?
in der Regel wird dieser von LEERZEICHEN umrandet.
Könnte aber auch ein Zeichen dahinter Stehen (.,!,?).
Aber nach so einem Zeichen kommt dann ja wg. satzende wieder ein Leerzeichen.
-
Deshalb könnten wir folgendes machen:
$linkCheck=split(" ",str_replace($string));
nun müssen wir überprüfen, ob die Textelemente links sind.
preg\_match("^http\:\/\/.+$",$linkCheck[$i]);
preg\_match("^www\..+$",$linkCheck[$i]);
-
Alle in ein Array ablegen. Dann überprüfen ob die Links miteinem Satzendezeichen(.!?
Enden, und dieses entfernen.
-
Schleife die jedes Array-Element in einen Link verwandelt:
$string=str_replace($link_array[$i],"Fertig!!Natürlich muss bei einenm nur www-Link "http…
Hä? Also irgendwie kapier ich das grad nit.
Was hat der Browser mit PHP zu tuen?
nix…
aber wenn ichs nur für mich verwenden würde bräuchte ich keine codebasierte Lösung 
- Wo steht ein Link?
in der Regel wird dieser von LEERZEICHEN umrandet.
Könnte aber auch ein Zeichen dahinter Stehen (.,!,?).
Aber nach so einem Zeichen kommt dann ja wg. satzende wieder
ein Leerzeichen.
kann man so einfach nicht sagen.
Der Link kann genauso am Beitragsanfang stehen - ebenso wie nach einem Zeilenumbruch. Gleiches gilt für den Abschluss des Links…
- Deshalb könnten wir folgendes
machen:
$linkCheck=split(" ",str_replace($string));
nun müssen wir überprüfen, ob die Textelemente links
sind.
preg_match("^http://.+$",$linkCheck[$i]);
preg_match("^www…+$",$linkCheck[$i]);
hmm… bei durchschnittlich 600 angezeigten Worten und damit array-Elementen find ich das nicht wirklich gut… :-/
Natürlich muss bei einenm nur www-Link „http://“ davor gesetzt
werden.
im Array „$link_array“ dürfen keine doppelten Einträge
vorhanden sein.
Das ganze müsste doch auch einfacher mit preg_replace gehen, oder?
bräuchte auch mal nen hint 
und zwar hab ich ein kleines Tool gebastelt, in dem ich nun
gerne die Links auch klickbar gemacht hätte…
<?php $t0 = <<<EOS<br />
lorem ipsum http://qwerqwerqwe
lorem ipsum https://qwerqwerqwe lorem ipsum http://qwerqwerqwe
http-geschichten
EOS;
$t0 = preg\_replace('|(https?://[^ \n\r]+)|s','[\1',$t0);print $t0;?\>](%5C1)
Die Frage ist: Wie sollte man das am besten lösen?
so lange suchen bis entweder ein Umbruch oder ein Leerzeichen
kommt?
die alternative waere solange zu suchen, wie gueltige eichen kommen, aber dabei erfindet immer einer ein zeichen, das man nciht vorgesehen hat.
was wäre dann aber mit den Links, in denen ein Leerzeichen
ist?
der suppennazi sagt: die sind ungueltig.
Doch lieber mit [url] Tags arbeiten?
bääh.
- Wo steht ein Link?
kann man so einfach nicht sagen.
Der Link kann genauso am Beitragsanfang stehen - ebenso wie
nach einem Zeilenumbruch. Gleiches gilt für den Abschluss des
Links…
Deswegen sollen umbrüche durch Leerezeichen ersetzt werden.
Das ganze müsste doch auch einfacher mit preg_replace gehen,
oder?
Jo, kann sein.
Hab daran garnit gedacht. (Bin z.Zt etwas in die Java/JSP-Welt abgetaucht.)
Das Problem sehe ich beim Ersetzen. Da du keinen eindeutigen String nimmst, sonndern du mit deinem regulären Ausdruck ersetzt.
Bei einem Array mit über hunderten von einträgen, würd ich mir keine gedanken machen. (Seit denn der Server hat 64 MB Ram).
Bei einem Array mit über hunderten von einträgen, würd ich mir
keine gedanken machen. (Seit denn der Server hat 64 MB Ram).
das array ist das eine, weiterhin hast du mindestens:
- bei preg match das array 2x (fundstelle und gefundenes pattern pro match)
- den overhead fuer das array (speicherbedarf ist groesser als summe( strlen(alle elemente) )
- den originaltext
- den auszugebenden text
- machst mit jedem element n operationen
- eine laufzeit
- m requests gleichzeitig
Hallo MunichFreak
Die Frage ist: Wie sollte man das am besten lösen?
so lange suchen bis entweder ein Umbruch oder ein Leerzeichen
kommt?
was wäre dann aber mit den Links, in denen ein Leerzeichen
ist?
Doch lieber mit [url] Tags arbeiten?
Habt ihr Vorschläge für mich?
Aus eigener Erfahrung: konstruiere Dir
eigene Tags und baue sie in Deine
Text-Ressourcen ein. Das hat viele
Vorteile.
Dein Parser könnte z.B. bei aa.bb.cc
etwas anderes machen als bei [local]/data/zips/info.zip[/data]
usw. Ausserdem ist es viel performanter, erstmal
ein festes Pattern [abc] zu suchen und dann
erst damit herumzufiddeln.
Grüße
CMБ
sehr sexy 
klasse der Code…
nu brauch ich nur noch einen, wo explizit das http fehlt, und der nur mit www. beginnt und dann noch ein http:// davor setzt - zumindest im Link…
Mal sehen, ob ich das noch schaffe…
Vielen Dank jedenfalls für Deinen code…
* 
Jippii 
falls das auch noch jemand anderes braucht…
$txt = preg_replace(’|[^https?://](www[^ \n\r]+)|s’,’\1’,$txt);
also wenn NUR www ohne http(s) davor steht wird auch ein Link draus *freu*
(könnten die Leute vom wewewa auch mal brauchen *fg*)