mailto-Links aus String entfernen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mailto-Links aus String entfernen

    Hallo zusammen

    Der Esel steht mal wieder bockend am Berg .

    Meine Webseite hab ich so gebaut, dass ich den Inhalt via WYSIWIG-Editor verwalten kann. Im IE hat das den "unschönen" Umstand, dass E-Mail-Adressen automatisch in MAILTO-Links umgewandelt werden. Und genau das möchte ich nicht.

    Nun hab ich mir mit langem suchen folgendes kleines Script zusammen gestrickt, welches beim Auslesen eines Textes diese automatisch erstellten Links ersetzen soll:
    Code:
    // mailto-Links in $t entfernen, übrig bleibt die Mailadresse als einfacher Text
    	$suchmuster = '#<a(.*)>(.*)</a>#';
    	$ersetzung = '\2';
    	$string = preg_replace($suchmuster, $ersetzung, $t);
    	//echo $string;
    	// Mailadressen in $string auslesen und in Array $result schreiben
    	if(preg_match_all("/\b\w[\w|\.|\-]+@\w[\w|\.|\-]+\.[a-zA-Z]{2,4}\b/",$string,$result)) 
    	$result = array_pop($result);  
    	// alle Vorkommen von Mailadressen in $string ersetzen mit verschlüsseltem Mailto-Link
    	$count = count($result);
    	for($i=0;$i<$count;$i++){
    		$cryptm = convema($result[$i]);
    		// die Mailadressen in $string mit den verschlüsselten Mailadressen ersetzen
    		$string = str_replace($result[$i], $cryptm, $string);
    	}
    Was macht das:
    • preg_replace --> sollte nach MAILTO-Links suchen und diese ersetzen, die Mailadresse aber als Text stehen lassen.
    • preg_match_all --> Filtert alle Mailadressen im Text und schreibt diese in ein Array.
    • convema() --> "Verschlüsselt" die Adressen und erstellt einen entsprechenden MAILTO-Link, damits Spamer etwas schwerer haben.


    Mein Problem: preg_replace zerhaut mit alle Links, nicht nur die MAILTO.
    Wie muss ich den regulären Ausdruck erweitern, damit der wirklich nur noch die Mail-Links berücksichtig?

    Danke & Gruss
    Philipp

  • #2
    So spät am Abend völlig ungetestet und nur zur Anschauung:
    PHP-Code:
    $mail   '<a href="mailto:bla@blubb.de">Blubb</a>';
    $search '/(<a href="mailto:.*">)(.*)(<\/a>)/';
    preg_match ($search$mail$hit);
    print_r($hit); 
    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Hallo,

      da die Varianten von beiden von euch gierig (greedy) matchen, wird das so nix und es wird alles vom ersten bis zum letzten Link in der Seite gematcht. Mein Vorschlag: DOMDocument->loadHTML() und DOMDocument->getElementsByTagName().

      Ansonsten halt: "#<a(\\s+[\\w:\\-]+=(?:'[^']*'|\"[^\"]*\"|[\\w:\\-]+))*\\s+href=(?:'([^']*)'|\"([^\"]*)\"|([\\w:\\-]+))(?1)*>(.+?)</a>#i"

      Die URL findest du in $2, $3 oder $4, den Titel (also Textinhalt) in $5. $1 ist nur ein Subpattern zum skippen der übrigen eventuell vorhandenen Attribute.

      Gruß,

      Amica
      Zuletzt geändert von AmicaNoctis; 31.03.2011, 00:04.
      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
      Super, danke!
      [/COLOR]

      Kommentar


      • #4
        Hallo

        Danke schon mal für eure Antworten. Da scheine ich noch ein bisschen arbeiten zu müssen...
        Werde diese in den kommenden Nächten testen. Für heute zu müde....

        Geben im Anschluss Feedback.

        Muchas gracias und gute Nacht.
        Philipp

        Kommentar

        Lädt...
        X