[PHP5] E-Mail Adresse formatieren.



  • Hi,

    ich suche nach einer Funktion die mir eine E-Mail Adresse (z. B. name@test.de) in folgendes Format umwandelt: name (at) test (dot) de

    Also so wie auf php.net.

    Ich habe jedoch bei google und auf php.net nichts anständiges zu dem Thema gefunden, sondern nur wie man E-Mail Adressen auf ihre Gültigkeit prüft. Kennt jemand dafür ne gute Funktion bzw. hat jemand eine dafür?

    Schon mal ein großes Danke im voraus. 🙂

    Euer mido!



  • hi,

    ich hab mla ne kleine Funktion programmiert, wobei ich denke, dass man den letzten Punkt bestimmt eleganter ersetzten kann, z.B. mit preg_replace. Bin aber in regExp nicht so fit, deshalb hab ich es so gemacht:

    function email($email, $at=' (at) ', $dot=' (dot) ')
    {
      $email=str_replace('@', $at, $email);
      $end=strrchr($email, '.');
      $email=substr($email, 0, strlen($email)-strlen($end));
      $end=substr($end, -strlen($end)+1);  
    
      return $email.$dot.$end;
    }
    

    Grüße
    Jan



  • mido schrieb:

    ich suche nach einer Funktion die mir eine E-Mail Adresse (z. B. name@test.de) in folgendes Format umwandelt: name (at) test (dot) de

    Dir ist schon klar, dass das im Bezug auf Spambots kaum etwas bringt?



  • Reyx schrieb:

    mido schrieb:

    ich suche nach einer Funktion die mir eine E-Mail Adresse (z. B. name@test.de) in folgendes Format umwandelt: name (at) test (dot) de

    Dir ist schon klar, dass das im Bezug auf Spambots kaum etwas bringt?

    dann rück mal nen besseren vorschlag raus? motzen kann jeder



  • mido schrieb:

    Reyx schrieb:

    mido schrieb:

    ich suche nach einer Funktion die mir eine E-Mail Adresse (z. B. name@test.de) in folgendes Format umwandelt: name (at) test (dot) de

    Dir ist schon klar, dass das im Bezug auf Spambots kaum etwas bringt?

    dann rück mal nen besseren vorschlag raus? motzen kann jeder

    eMailadresse nicht als Text, sondern als Bild darstellen



  • LeGaN schrieb:

    eMailadresse nicht als Text, sondern als Bild darstellen

    dito. Es gibt hier zwar auch Spezialisten, die dieses Verfahren kritisieren, in der Praxis ist es aber schlichtweg das erfolgreichste. 😉

    Ein einfaches Durchblättern der letzten 2 Seiten dieses Forums kann schon Wunder wirken 😉
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-176237-and-start-is-0.html



  • LeGaN schrieb:

    mido schrieb:

    Reyx schrieb:

    mido schrieb:

    ich suche nach einer Funktion die mir eine E-Mail Adresse (z. B. name@test.de) in folgendes Format umwandelt: name (at) test (dot) de

    Dir ist schon klar, dass das im Bezug auf Spambots kaum etwas bringt?

    dann rück mal nen besseren vorschlag raus? motzen kann jeder

    eMailadresse nicht als Text, sondern als Bild darstellen

    Und was ist mit Barrierefreies Internet? Ein Bild als Mail-Addy ist ein witz.

    Hier ein besserer Ansatz: http://de.wikipedia.org/wiki/Spam

    mailname<span style="display:none;">-Löschen Sie diesen Text-
    </span>@<span style="display:inline;">example.com</span>
    


  • maumau schrieb:

    Und was ist mit Barrierefreies Internet? Ein Bild als Mail-Addy ist ein witz.

    Eine Bitmap ist sehr barrierefrei. Barrierefreier, als z.B. die Verwendung von CSS.

    Textbrowser nutzen ein soo marginaler Teil der WEltbevölkerung, dass es sich nicht lohnt, auf diese Rücksicht zu nehmen. Bzw. wer einen solchen Browser benutzt und tatsächlich mal ins Impressum blicken sollte, der wird wohl auch einen anderen Browser irgendwann mal starten können.

    Gleiches gilt wohl für Blinde. Auch dort gibt es andere Wege, an den Inhalt eines Bildes zu kommen. Und wie viele Blinde sitzen vor dem Computer und lassen sich vom Computer das Impressum einer Webseite vorlesen, schreiben die Adresse diktatmäßig mit um dann eine Benachrichtigung dahin zu schreiben? Infinitesimal klein, dieser Anteil!

    Der einzige Aspekt wäre der rechtliche, wie er im von mir verlinkten Thread besprochen wird. Aber zu sagen, eine E-Mail-Adresse als Graphik würde die Barrierefreiheit behindern, das ist imho ein Witz!



  • Hi,

    das mit CSS ist eigentlich gar keine schlechte Möglichkeit.

    maumau schrieb:

    Ein Bild als Mail-Addy ist ein witz.

    Nicht wirklich. Funktioniert nämlich gut.

    EDIT:

    maumau schrieb:

    Und was ist mit Barrierefreies Internet?

    Naja, es gibt doch genügend dinge, wo man zuerst einen Code von einem Bild ablesen muss, damit man überhaupt ein Formular abschicken kann...





  • Hi,

    hab mir mal ein paar Gedanken zu diesem Thema gemacht.
    Die Idee mit den Bilder finde ich gut und ist effektiv jedoch wenn man viele E-Mail Adressen hat Zeitaufwändig.
    Also hab ich mir gedacht warum kann ich mit PHP nicht die Bilder erzeugen.
    Was dabei ausgekommen ist seht ihr unten. Damit das ganze funktioniert muss die GD-Bibliothek auf dem Server Installiert sein. Ich hab das ganz jetzt ein bisschen ausführlich gemacht damit es auch jeder versteht.

    Datei email_fuc.php

    <?php
    	function bild($width, $height, 
    	$red_bg, $green_bg, $blue_bg, 
    	$red_font, $green_font , $blue_font, 
    	$font, $font_size, $email, $a, $b, $pointer, $pic_name)
    	{
      		$im = imagecreate($width, $height);		
    		$farbe = imagecolorallocate($im, $red_bg, $green_bg , $blue_bg);
      		imagefill ($im, 0, 0, $farbe);
      		$font_color = imagecolorallocate($im, $red_font, $green_font, $blue_font);		
      		imagettftext($im, $font_size, $a, $b, $pointer, $font_color, $font, "$email");		
      		imagejpeg($im, './email_pic/'."$pic_name.jpg");
      		imagedestroy($im);
         }
    bild($breite, $hoehe, 
    $rot_hintergrund, $grün_hintergrund, $blau_hintergrund, 
    $rot_schriftfarbe, $grün_schriftfarbe, $blau_schriftfarbe, 
    $schrift, $schrift_goesse, $email_adresse, $x, $y, $ht, $bildname);
    ?>
    

    Ausgabe:
    email-pic.de

    <html>
    <head>
    <title>E-Mail Adressen in Bilder speichern</title>
    </head>
    <body>
    <?php
    //breite und hoehe des Bildes in Pixel
    $breite = 200;
    $hoehe = 20;
    /*Hintergrundfarbe des Bildes und Schriftfarbe
    Farb-ID setzt sich aus rot, grün, und blau Anteile zusammen
    Beispiele: [0, 0, 0 = schwarz 255, 255, 255  = weiß 199, 023, 005 = rot] */
    //hintergrundfarbe
    $rot_hintergrund = 255;
    $grün_hintergrund = 255;
    $blau_hintergrund = 255; 
    //schriftfarbe
    $rot_schriftfarbe = 69;
    $grün_schriftfarbe = 69;
    $blau_schriftfarbe = 247;
    //Schrift arial.fft usw. pfad muss mit angegben werden
    $schrift = "font/arial.ttf";
    //Schrfit groesse in Pixel
    $schrift_goesse = 12;
    //Die E-mail Adresse info@deinedomian.de
    $email_adresse = "e-mail@domain.de";
    // x und y Koordinaten für Schrift Ausrichtung
    $x = 0;
    $y = 5;
    //Damit kann man die schrift hoch oder tief gestellt werden
    $ht = 15;
    //name unter dem das Bild gespeichert werden soll kein .jpg angeben
    $bildname = "e-mail";
    include "email_fuc.php";
    	if ( file_exists("email_pic/$bildname.jpg") )
    	{
    		echo "Bild ist bereist vorhanden: ";
    	}	
    	else 
    	{
    		echo "Bild wurden gespeichert. ";
    		include "email2.php";
    	}
    echo "<img src=\"email_pic/$bildname.jpg\" /><br />\n";
    echo " <br />\n";
    ?>
    </body>
    </html>
    

    Wenn man viele E-Mail Adressen hat kann man die Werte auch direkt angaben und nur noch die E-Mail Adresse eingeben und das ganze dann durch ne foreach Schleife schicken ich habe es jetzt mal etwas ausführlicher gemacht zum besseren Verständnis.

    Könnte in etwa so aussehen.

    <?php
    	function email_pic($email)
    	{
      $im = imagecreate(300,20);
      $weiß = imagecolorallocate($im, 255, 255, 255);
      imagefill ($im, 0, 0, $weiß);
      $schwarz = imagecolorallocate($im, 0, 0, 0);
    
      $schriftart = "font/arial.ttf";
      imagettftext($im, 10, 0, 5, 16, $schwarz, $schriftart, "$email");
    
      imagejpeg($im, 'pic/'."$email.jpg");
      imagedestroy($im);
         }
    ?>
    
    <html>
    <head>
    <title></title>
    </head>
    <body bgcolor="FF000">
    <?php
    include "email_fuc.php";
    $email["Max Mutermann1"] = "max.mustermann1@deinedomain.de";
    $email["Max Mutermann2"] = "max.mustermann2@deinedomain.de";
    $email["Max Mutermann3"] = "max.mustermann3@deinedomain.de";
    $email["Max Mutermann4"] = "max.mustermann4@deinedomain.de";
    $email["Max Mutermann5"] = "max.mustermann5@deinedomain.de";
    $email["Max Mutermann6"] = "max.mustermann6@deinedomain.de";
    $email["Max Mutermann7"] = "max.mustermann7@deinedomain.de";
    $email["Max Mutermann8"] = "max.mustermann8@deinedomain.de";
    
    foreach ($email as $name=>$adresse)
    {
    	if ( file_exists("email_pic/$adresse.jpg") )
    	{
    		echo "Bild ist bereist vorhanden: ";
    	}	
    	else 
    	{
    		echo "Bild wurden gespeichert: ";
    		email_pic("$adresse");
    	}
    echo "$name:  <img src=\"email_pic/$adresse.jpg\" /><br />\n";
    echo " <br />\n";
    }
    ?>
    </body>
    </html>
    

    Am besten wäre wenn man das ganze an eine Datenbank anzuschielßen.

    Hier können die Datein runtergelanden werden.
    [url]http://web2.vs170006.vserver.de/email_pic.zip[/url



  • Hi,

    wäre es nicht geschickter, das alles in eine Klasse zu verpacken?

    class EMailPicture
    {
      private function __construct($email, $dir, $foreground=0, $background=0xffffff)
      {
        /* Erstellt mittels $this->create_image() das Bild mit der
           eMail $email im Ordner $dir mit.
           Wenn das Bild nicht erstellt werden konnte, schmeiße
           eine Exception.
        */
      }
    
      private function create_image()
      {
        /* Erstellt das Bild und speichert es unter den namen
           self::create_file_name($email) ab und gibt bei erfolg true,
           sonst false zurück.
        */
      }
    
      private static function create_file_name($email)
      {
        /* Erstellt einen Datei-Namen aus $email und gibt diesen Zurück. */
      }
    
      public static function get_email($email, $dir='./')
      {
        /* Schaut, ob das Bild schon mit dem Namen self::create_file_name($email)
           schon existiert, wenn ja, gibt er die Bild-url zurück, wenn nein,
           erzeuge ein Bild mit der Erzeugung eines Object von EMailPicture
           und gibt die Bild-url zurück.
        */
      }
    }
    

    Dann braucht man nur noch das machen:

    print('<img src="'.EMailPicture::get_email($email).'">');
    


  • Das kann aber gefährlich werden, wenn die E-Mail-Adressen dynamisch angelegt werden! Denn so, wie deine Klasse strukturiert ist, gibt es nichts und niemanden, der den Ordner überwacht, der immer mehr und mehr Bilder beinhaltet.



  • Reyx schrieb:

    Das kann aber gefährlich werden, wenn die E-Mail-Adressen dynamisch angelegt werden! Denn so, wie deine Klasse strukturiert ist, gibt es nichts und niemanden, der den Ordner überwacht, der immer mehr und mehr Bilder beinhaltet.

    Da hast du recht, habe ich gar nicht bedacht. Aber ich ging auch davon aus, dass man schon weiß, welche eMails man verwendet.

    Wie sollte denn so eine Überwachung aussehen?



  • 1. keine dynamisch generierten Dateien erzeugen (die z.B. aus Benutzereingaben generiert werden, wie z.B. $_POST['someEmailAdress'].
    2. Regelmäßig auf nicht mehr verwendete Graphiken prüfen, falls nicht alle hartkodiert wurden.


Anmelden zum Antworten