E-Mailadressen und Internetadressen aus Text schneiden

g-zus

Erfahrenes Mitglied
Hallo,

so, hab ein kleines Problem.
Und zwar hab ich auf einer Privatpage von mir ein relativ Altes Gästebuch von einem ServiceAnbieter, in dem sich schon ziemlich viele Freunde von mir verewigt haben. Ziemlich viele sogar :)

Nun hab ich endlich ein eigenes Gästebuch programmiert und möchte dieses online stellen, vorher aber noch alle E-Mailadressen und alle Internetadressen, die darin gespeichert wurden rausfiltern und in eine Statistikdatenbank speichern.

Wie ich ansetzen muss weiß ich bereits, aber die Umsetzung, da hab ich paar kleine Schwierigkeiten:

Ich weiß, dass ich einfach nach den Zeichen "@" bzw. dem String "http://" suchen muss. Begrenzt werden die E-Mailadressen bzw. URLs durch zwei Anführungszeichen ' " '. Eins vor der E-Mailadrese bzw. dem Link und eins danach, aber wie ich nun das per PHP rausfiltere, da hab ich leider keine Ahnung. Hatte noch nie wirklich Ahnung von "String-Untersuchung" (oder wie man das auch sonst nennen mag).

Jemand da der zeit hat und mir auf die Sprünge helfen könnte?

Danke schon mal.
 
Das geht recht einfach mit preg_match_all. Versuche folgenden Code, den Du einfach auf Gästebuchtext (vorhanden in $gb_page) anwenden kannst:

PHP:
   $urlsearch = "/\"(http:\/\/\S+)\"/i";
   $mailsearch = "/\"([\.\w\-]+\@[\.\w\-]+\.[\.\w\-]+)\"/i";
   
   preg_match_all($urlsearch, $gb_page, $urlresults);
   preg_match_all($mailsearch, $gb_page, $mailresults);
   
   for ($I=0; $I<count($urlresults[1]); $I++) echo $urlresults[1][$I], "<br>\n";
   for ($I=0; $I<count($mailresults[1]); $I++) echo $mailresults[1][$I], "<br>\n";

Infos zu preg_match_all hier:

http://www.php.net/manual/de/function.preg-match-all.php
 
Zuletzt bearbeitet von einem Moderator:
hey, danke für die schnelle Hilfe.

jojo, preg_match_all(), die Funktion versteh ich selbst nach hundert mal durchlesen nicht ganz.

Aaaaaalso, habs nun getestet und den Inhalt einer HTML-Datei eingelesen und mit dem Code ausgegeben und für URLs hat das wunderbar geklappt, jedoch wurden keine E-mailadressen angezeigt. Zuerst dachte ich, es kann ja sein, dass keine angeben wurden, aber es liegt glaub ich eher an dem Fehler:

Ich hab angegeben, dass ich einen HTML-Code wenn ich nach E-Mailadressen durchsuchen will nach folgendem Schema suchen muss:

Anführungszeichen+irgendeinText+@+irgendeintext+anführungszeichen

-------> "...@..."

Leider klappte das nicht, und zwar weil mein Guestbook ja logischwerseie folgenden Code erzeugt:

"mailto:...@..."

Das heisst das mailto haben wir vergessen, oder? Oder hätte es das normalerweise nicht einfach mit anzeigen müssen?

Naja, keine Ahnung, leider es noch nicht ganz und ich hab leider keinen Durchblick bei der Funktion. Weiß wer wie ich das nachbesser müsste?

Mein Script schaut im Moment so aus:

PHP:
<?php

   // hier wird der Inhalt einer HTML-File ausgelesen

   $gb_page = implode ('', file ('http://www.zu-lesende-url.com'));

   $urlsearch = "/\"(http:\/\/\S+)\"/i";
   $mailsearch = "/\"([\.\w\-]+\@[\.\w\-]+\.[\.\w\-]+)\"/i";
   
   preg_match_all($urlsearch, $gb_page, $urlresults);
   preg_match_all($mailsearch, $gb_page, $mailresults);
   
   for ($I=0; $I<count($urlresults[1]); $I++) echo $urlresults[1][$I], "<br>\n";
   for ($I=0; $I<count($mailresults[1]); $I++) echo $mailresults[1][$I], "<br>\n";

?>
 
Ändere dein Script wie folgt ab:

PHP:
  <?php
  
     // hier wird der Inhalt einer HTML-File ausgelesen
  
     $gb_page = implode ('', file ('http://www.zu-lesende-url.com'));
  
     $urlsearch = "/\"(http:\/\/\S+)\"/i";
     $mailsearch = "/\"mailto:([\.\w\-]+\@[\.\w\-]+\.[\.\w\-]+)\"/i";
     
     preg_match_all($urlsearch, $gb_page, $urlresults);
     preg_match_all($mailsearch, $gb_page, $mailresults);
     
     for ($I=0; $I<count($urlresults[1]); $I++) echo $urlresults[1][$I], "<br>\n";
     for ($I=0; $I<count($mailresults[1]); $I++) echo $mailresults[1][$I], "<br>\n";
  
  ?>

Nun sollten auch die Mailadressen gefunden werden. Das "mailto:" wird nicht mit im Ergebnis stehen, brauchst es also nicht explizit zu entfernen.

Das "mailto:" wurde bislang ignoriert, weil der Reguläre Ausdruck [\.\w\-]+ nur die Zeichen . - sowie Buchstaben und Zahlen matcht, aber keine sonstigen Sonderzeichen, die in Mailadressen eh nicht erlaubt sind.
 
Zuletzt bearbeitet von einem Moderator:
Zurück