PHP-Einfach.de PHP lernen leicht gemacht

Navigation
» Startseite
» Newsübersicht
» Kontakt
» Impressum

Community
» Forum
» Gästebuch

Tutorial
» PHP Tutorial
» MySQL Tutorial
» PHP
   » Gästebuch
   » Logfiles
   » Sitemap
   » Login
   » Login Sessions
   » Login Sessions +
      Dateien

   » Links anklickbar
   » Counter
   » Dateiupload
   » Formular mailer
   » Cookies

» MySQL
» Codeschnipsel

Downloads
» Einführung
» Scripts
» Command Board

Sonstiges
» md5-Generator
» Generator
» Wissenswertes

PHP lernen


Dieses Projekt wird unterstützt von
Lichteffekte Shop

 
Partner:
PHP Forum
Mathe Nachhilfe
Suchmaschinenoptimierung

URL's und E-Mail Adressen anklickbar machen

Mit PHP können wir einen Text so durchsuchen lassen, dass wenn man Ihn wieder ausgibt, die URL's und die E-Mail Adressen anklicken kann.
Dies benutzt man oft in Gästebüchern oder auch in Foren.

Die einfache Variante
Hier werden die Links automatisch ergänzt, und somit ist es auch nicht ganz so aufwendig zu Programmieren.

Achtung Es können Fehler bei bestimmten URL's auftreten, deswegen sollte man lieber die Komplexe Variante benutzen.

Zuerst schauen wir, wie wir nur URL's ersetzen:
<?php
$text = "http://www.web.de oder www.php-einfach.de";
$text = eregi_replace("http://www.", "www.", $text);
$text = eregi_replace("www.", "http://www.", $text);

$text = preg_replace("#(^|[^\"=]{1})
(http://|ftp://|mailto:|https://)([^\s<>]+)([\s\n<>]|$)
#sm",
"\\1<a target=\"_blank\" href=\"\\2\\3\">\\3</a>\\4",
$text);

echo $text;
?>
Als erstes haben wir wieder einen Text in dem 2 URL's vorkommen. Einmal nur mit www. und einmal mit http://
Als nächstes lassen wir http://www. durch www. ersetzen, und dann www. durch http://www. Das hat den Grund, das sowohl http:// Adressen als auch nur Adressen mit www. anklickbar gemacht werden. Würden wir dieses nicht machen, würde aus www.clanwissen.de kein Link.

Danach lassen wir den Text nach allen Vorkommen von http:// ftp:// und mailto: durchsuchen. Wenn wir soetwas gefunden haben, wird die Stelle in einen Link verwandelt.

Zum Schluss gegen wir den Text dann aus.

E-Mail Adresse So ähnlich geht es auch mit E-Mail Adressen, allerdings überprüfen wir vorher nochmals, ob es diese Adresse geben kann.

<?php
$text = "test@web.de";

$emailsuchen[]="/([\s])([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";

$emailsuchen[]="/^([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";

$emailreplace[]="\\1<a href=\"mailto:\\2\">\\2</a>";
$emailreplace[]="<a href=\"mailto:\\0\">\\0</a>";

if (strpos($text, "@"))
   {
   $text = preg_replace($emailsuchen, $emailreplace, $text);
   }
echo $text;
?>



Mit strpos suchen wir alle @'s aus dem Text herraus.
Haben wir ein gefunden, überprüfen wir mir $emailsuchen[] ob die Adresse gültig ist (name@domain.de) und lassen sie dann durch $emailreplace[] ersetzen. Dies machen wir wieder alles mit preg_replace nur das wir die einzelnen Ersetzungstexte vorher in Variablen gespeichert haben.

Geben wir jetzt den Text aus, so können wir die Adresse anklicken.


Die komplexe Variante
In der komplexen Varianten lassen wir eine URL erst umschreiben. Wir fügen Ihr am Anfang ein [URL] hinzu und am Ende ein [/URL]. Anschließen lassen wir alle diese URL's ersetzen.
Dies hat den Vorteil, dass der Besucher selbst bestimmen kann, wie der Link Text aussieht, denn so können wir auch solche URL's ersetzen: [URL=http://www.web.de]Hier klicken[/URL].

Zuerst fügen ergänzen wir wieder die URL-Adressen (aus http://link wird [URL]http://link[/URL]):

<?php
$text = "http://www.php-einfach.de";

$urlsuch[]="/([^]_a-z0-9-=\"'\/])((https?|ftp):\/\/|www\.)([^ \r\n\(\)\^\$!`\"'\|\[\]\{\}<>]*)/si";
$urlsuch[]="/^((https?|ftp):\/\/|www\.)([^ \r\n\(\)\^\$!`\"'\|\[\]\{\}<>]*)/si";

$urlreplace[]="\\1[URL]\\2\\4[/URL]";
$urlreplace[]="[URL]\\1\\3[/URL]";

$text = preg_replace($urlsuch, $urlreplace, $text);
?>
Geben wir den Text jetzt aus, so erhalten wir als Ausgabe: [URL]http://www.php-einfach.de[/URL].

Jetzt kommt der nächste Schritt, die URL's werden zu Links:

<?php
$text = preg_replace("/\[URL\]www.(.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"http://www.\\1\">www.\\1</a>", $text);

$text = preg_replace("/\[URL\](.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"\\1\">\\1</a>", $text);

echo $text;
?>

Zuerst lassen wir unseren Text durchsuchen nach URL's die mit www. Anfangen. Diesen Adressen müssen wir noch mit einem http:// versehen, sonst funktionert der Link nicht richtig.
Danach lassen wir alle anderen URL's in Links umformen.

Als nächstes wollen wir, Adresse wie diese richtig Ausgeben: [URL=http://www.php-einfach.de]PHP-Einfach[/URL]

<?php
$text = "[URL=http://www.php-einfach.de]PHP-Einfach[/URL]";

$text = preg_replace("/\[URL=www.(.*?)\](.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"http://www.\\1\">\\2</a>", $text);

$text = preg_replace("/\[URL=(.*?)\](.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"\\1\">\\2</a>", $text);

echo $text;
?>

Das war es auch schon.

E-Mail Adressen
Das gleiche geht natürlich auch mit E-Mail Adressen.
Zuerst durchsuchen wir unseren Text nach E-Mail Adressen.
Dann wird aus klaus@mustermann.de [EMAIL]klaus@mustermann.de[/EMAIL]

<?php
$text = "klaus@mustermann.de";

$emailsuch[]="/([\s])([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";

$emailsuch[]="/^([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";
$emailreplace[]="\\1[EMAIL]\\2[/EMAIL]";
$emailreplace[]="[EMAIL]\\0[/EMAIL]";

if (strpos($text, "@"))
    {
    $text = preg_replace($emailsuch, $emailreplace, $text);
    }
?>

Wie oben schon erklärt, werden hier die Adressen auch auf die Gültigkeit überprüft.

Jetzt lassen wir sie mal ersetzen:

<?php
$text = preg_replace("/\[EMAIL\](.*?)\[\/EMAIL\]/si", "<a href=\"mailto:\\1\">\\1</a>", $text);
?>

Haben wir jetzt so einen Text: [EMAIL=klaus@mustermann.de]E-Mail[/EMAIL], müssen wir den Script etwas umschreiben:
<?php
$text = preg_replace("/\[EMAIL=(.*?)\](.*?)\[\/EMAIL\]/si", "<a href=\"mailto:\\1\">\\2</a>", $text);

echo $text;
?>

Das war auch schon alles über E-Mail Adressen.

Das geleiche geht auch mit Bilder: <?php $text = "[IMG]bild.jpg[/IMG]";
$text = preg_replace("/\[IMG\](.*?)\[\/IMG\]/si", "<img src=\"\\1\" border=\"0\">", $text);
echo $text;
?>

Jetzt hier nochmal das komplette Script:

<?php
$text = "http://www.php-einfach.de und klaus@mustermann.de";

//Aus http://url wird [URL]http://url[/URL]
$urlsuch[]="/([^]_a-z0-9-=\"'\/])((https?|ftp):\/\/|www\.)([^ \r\n\(\)\^\$!`\"'\|\[\]\{\}<>]*)/si";
$urlsuch[]="/^((https?|ftp):\/\/|www\.)([^ \r\n\(\)\^\$!`\"'\|\[\]\{\}<>]*)/si";

$urlreplace[]="\\1[URL]\\2\\4[/URL]";
$urlreplace[]="[URL]\\1\\3[/URL]";

//Aus klaus@mustermann.de wird [EMAIL]klaus@mustermann.de [/EMAIL]
$emailsuch[]="/([\s])([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";
$emailsuch[]="/^([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";

$emailreplace[]="\\1[EMAIL]\\2[/EMAIL]";

$emailreplace[]="[EMAIL]\\0[/EMAIL]";

$text = preg_replace($urlsuch, $urlreplace, $text);
if (strpos($text, "@"))
    {
    $text = preg_replace($emailsuch, $emailreplace, $text);
    }

//Die URL's werden zu Links
$text = preg_replace("/\[URL\]www.(.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"http://www.\\1\">www.\\1</a>", $text);

$text = preg_replace("/\[URL\](.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"\\1\">\\1</a>", $text);

$text = preg_replace("/\[URL=www.(.*?)\](.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"http://www.\\1\">\\2</a>", $text);

$text = preg_replace("/\[URL=(.*?)\](.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"\\1\">\\2</a>", $text);

//E-Mail Adressen werden zu links
$text = preg_replace("/\[EMAIL\](.*?)\[\/EMAIL\]/si", "<a href=\"mailto:\\1\">\\1</a>", $text);

$text = preg_replace("/\[EMAIL=(.*?)\](.*?)\[\/EMAIL\]/si", "<a href=\"mailto:\\1\">\\2</a>", $text);

//[IMG]bild.jpg[/IMG] wird als Bild angezeigt
$text = preg_replace("/\[IMG\](.*?)\[\/IMG\]/si", "<img src=\"\\1\" border=\"0\">", $text);

echo $text;
?>

Autor Andavos

News
13.08 - » Spam im Gästebuch
Endlich Schluss mit dem Spam

08.12 - » Clanletter 2.0
Clanletter wurde komplett neu programmiert

01.09 - » Command Board 1.0 - 2.0
Das Command Board 1.0 Beta 2.0 ist erschienen


Mehr

Forum
» Entwickler Forum

» insert nach login

» Tabellenzelle zu groß







© PHP-Einfach.de 2003 - 2012