Link automatisch anklickbar machen
Thomas
- php
Hallo!
Ich möchte, dass in einem Url in einem Text automatisch in einen Link umgewandelt wird. Das wäre mit irgendeinem Codeschnipsel mit regulären Ausdrücken noch irgendwie hinzubekommen, auch wenn ich mich mit reg. Ausdrücken nicht auskenne. Aber ich möchte, dass bei Links zur eigenen Homepage der Url der Homepage nicht sichtbar ist.
Also aus
http://meine-homepage.de/verzeichnis
soll
<a href='http://meine-homepage.de/verzeichnis'>verzeichnis</a>
werden, aber aus
http://andere-homepage.de/test/
soll weiterhin
<a href='http://andere-homepage.de/test/'>http://andere-homepage.de/test/</a>
werden.
Wie mache ich das??
Vielen Dank für eure Hilfe!
Grüße,
Wie mache ich das??
mit regulären ausdrucken wie du selbst shcon oben erwähnt hast - wo soll das problem liegen?
MFG
bleicher
Grüße,
Wie mache ich das??
mit regulären ausdrucken wie du selbst shcon oben erwähnt hast - wo soll das problem liegen?
MFG
bleicher
Das ich keine Ahnung von regulären Ausdrücken und im Internet nur Beispiele zu finden sind, die Links ersetzen, aber nicht noch eine Unterscheidung drin haben, ob es meine oder eine andere Homepage ist
Grüße,
Das ich keine Ahnung von regulären Ausdrücken und im Internet nur Beispiele zu finden sind, die Links ersetzen, aber nicht noch eine Unterscheidung drin haben, ob es meine oder eine andere Homepage ist
nimm x-beliebiges besipiel, dupliziere und ergänze ein suchmuster mit http://www.deinepage..bla
ich empfhele dir das handbuch bei php.net - ist recht verständlich.
MFG
bleicher
$text=preg_replace("#(http://)?(www.)?([a-zA-Z0-9-./]+)#","<a
href='http://$2$3'>$1$2$3</a>",$text);
Dieser Code ersetzt alle Links, aber wie mache ich das jetzt mit der eigenen Homepage??
Hello,
$text=preg_replace("#(http://)?(www.)?([a-zA-Z0-9-./]+)#","<a
href='http://$2$3'>$1$2$3</a>",$text);
Dieser Code ersetzt alle Links, aber wie mache ich das jetzt mit der eigenen Homepage??
Das ist doch erst Stufe 3 :-)
Das ganze also nochmal durchlaufen lassen für den angezeigten Text und den (variablen) String für Deine Homepage rausschmeißen lassen. Da der Link nach obiger Aktion normalisiert sein sollte (ich hab's nicht überprüft), musst Du nur nach einem ganz einfachen (statischen) Muster suchen. Das kannst Du sogar mit str_replace() machen
Alles klar?
if ((strpos = ($link,$suchmuster) === 0))
{
$anzeigetext = str_replace($suchmuster,'',$link);
}
http://de.php.net/manual/de/function.strpos.php
http://de.php.net/manual/de/function.str-replace.php
Das mögen Andere anders sehen, aber ich würde, auch wenn es mit einer Monster-regular-Expression in einem Schritt ginge immer zwei oder drei draus machen.
Man kann dann viel leichter nachvollziehen, was da passsiert und außerdem kann man die einfachen Zwisxchenschritte dann auch durch die wesentlich billigeren Stringfunktionen abarbeiten lassen.
Warum immer gleich mit Kanonen auf Spatzen schießen?
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
So, jetzt klappts:
$text=preg_replace("#(http://)?(www.)?([a-zA-Z0-9-./]+)#","<a
href='http://$2$3'>$1$2$3</a>",$text);
$text=preg_replace("#(<a
href=')([a-zA-Z0-9-.:/]+)('>)(http://)?(www.)?(meine-homepage.de/)#","$1$2$3",$text);
echo $text;
Hello,
Ich möchte, dass in einem Url in einem Text automatisch in einen Link umgewandelt wird. Das wäre mit irgendeinem Codeschnipsel mit regulären Ausdrücken noch irgendwie hinzubekommen, auch wenn ich mich mit reg. Ausdrücken nicht auskenne. Aber ich möchte, dass bei Links zur eigenen Homepage der Url der Homepage nicht sichtbar ist.
Also aus
http://meine-homepage.de/verzeichnissoll
<a href='http://meine-homepage.de/verzeichnis'>verzeichnis</a>
werden, aber aus
http://andere-homepage.de/test/
soll weiterhin
<a href='http://andere-homepage.de/test/'>http://andere-homepage.de/test/</a>
Das ist eigentlich eine interessante Übungsaufgabe.
Ich würde das in mehreren Stufen machen.
1. Stufe Link erkennen
2. Stufe Link normalisieren
3. Stufe Link anpassen und die Ausgabe zusammenbauen
function get_urls($page)
{
$_urls = array();
$_a = array();
$newpage = '';
// 1 2 3 4 <5> 6 7
$pattern = '=^(.*?)(<area|<a|<img)(.*?)(href=|src=)"|'"|'(>.*$|>.*?</a>.*$)=msi';
while(preg_match($pattern, $page, $_a))
{
if(count($_a)>1)
{
$page = $_a[7];
## $newpage .= $_a[1].$_a[2].$_a[3].$_a[4].'"'.rewrite_url($_a[5]).'"'.$_a[6];
$_urls[] = $_a[5];
}
}
# return $newpage.$page;
return $_urls;
}
Vielleicht hilft Dir die kleine Funktion dabei.
Die sucht in einer Seite (also dem String $page) alle Hyperreferenzen heraus, die unter (1) in der Liste stehen.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hello,
eine weitre Funktion, als Beispiel wie man es machen könnte (?)
function textfilter($text,$filter)
{
if (!is_array($filter))
{
$filter = explode(",",$filter);
}
if(in_array('email',$filter))$text = ereg_replace("mailto:[^<>[:space:]]+[[:alnum:]/]","<a href="\0">\0</a>", $text);
if(in_array('http',$filter))$text = ereg_replace("http://[^<>[:space:]]+[[:alnum:]/]","<a href="\0" target="_blank">\0</a>", $text);
if(in_array('ftp',$filter))$text = ereg_replace("ftp://[^<>[:space:]]+[[:alnum:]/]","<a href="\0">\0</a>", $text);
return $text;
}
Wenn Du der Funktion den text und eine Liste mit den gewünschten Ersetzungen gibst
Dann werden die ersetzt
Die Funktion hat sich Fabian T. mal ausgedacht und sie lebt immer noch.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
So, hab jetzt nochmal versucht, selber ohne viele Kenntnisse was zusammenzubauen:
$text=preg_replace("#(http://)?(www.)?(meine-homepage.de)?([a-zA-Z0-9-./]+)#","<a href='http://$2$3$4'>$1$2$4</a>",$text);
$3 kann man dann ja einfach weg lassen, aber $1 und $2 müssten dann auch noch weg. Habe deshalb auch schon
(http://www.meine-homepage.de|www.meine-homepage.de|http://meine-homepage.de|meine-homepage.de)
aber so klappt es leider nicht, das www bzw. das http:// wird lieber als $1 oder $2 genommen!