Javascript: Emailadressen auf der Seite gegen Spam-Bots schützen

23. März 2009

Jeder weiss wie lästig es ist, wenn man jeden Tag mehrere Spam Emails erhält. Leider ist das immer häufiger der Fall, da Bots, das sind eigens programmierte Skripte, Emailadressen aus dem Quellcode von Webseiten auslesen. Das ist recht einfach indem man mit einer RegEx nach einem bestimmten Muster im Text sucht, welches zb. ein @ enthält. Wir werden nun die Links zu Emailadressen so darstellen, dass dem Bot eine falsche Emailadresse vorgegaukelt wird. In den bereich der seite binden wir unser JavaScript ein, welches später die Emailadresse korrekt ausgibt:

<script language="JavaScript1.2">
function mailsend(mail,p1,p2,p3) {
  var ca;
  ca = "mailto:" + p2 + "\@" + p3 + "." + p1;
  mail.href = ca;
  return (1);
}
</script>

Nun müssen wir nur noch die links im wie folgt formatieren:

<a href="mailto:no.bot.can@get.us" onClick="mailsend(this,'tld','name','domain');">Email</a>

Es müssen nur die Platzhalter tld (Top Level Domain wie .com, .at, …), name und domain ersetzt werden. Ein Beispiel:

<a href="mailto:no.bot.can@get.us" onClick="mailsend(this,'com','info','promadesign');">Email</a>

Der Bot welcher den Quellcode ausliest liest die Emailadresse „no.bot.can@get.us“ aus. Der User welcher aber auf den Link „Email“ klickt bekommt die korrekte Emailadresse zu sehen.

PHP: Rekursives auslesen eines Ordners

23. März 2009

Wir werden nun eine Funktion erstellen, welche uns einen beliebigen Ordner rekursiv ausliest. Das heisst dass die Ordnerstruktur und die Tochterstrukturen ausgelesen und dargestellt werden. wir wollen mit dem aufbau der funktion beginnen:

function getDir($dir) {
  $dh = opendir($dir);
  while($file = readdir($dh)) {
    echo $file.'<br>';
  }
  closedir($dh);
}

function getDir($dir) sollte klar sein. Die Funktion getDir wird erstellt und die Variable $dir wird übergeben. $dh = opendir($dir) öffnet den Ordner $dir und speichert die Information im Directory Handle $dh. while($file = readdir($dh)) ist eine Schleife welche das Directory Handle durchwandert und bei jedem Eintrag die Variable $file füllt. Mit echo $file geben wir diesen Wert von $file zurück. Ganz wichtig ist es dass der Ordner wieder geschlossen wird: closedir($dh); Nun werden aber auch . und .. ausgegeben. Das können wir verhindern indem wir eine IF-ELSE Kondition einbinden:

function getDir($dir) {
  $dh = opendir($dir);
  while($file = readdir($dh)) {
    if($file != "." && $file != "..") {
        echo "$file (file)<br>";
    }
  }
  closedir($dh);
}

Nun erhalten wir schon eine ganze „Wurst“ an Namen, aber wir möchten gern wissen ob es sich bei dem jeweiligen Eintrag um einen Ordner oder eine Datei handelt. Das können wir mit einer weiteren IF-ELSE Kondition erreichen:

function getDir($dir) {
  $dh = opendir($dir);
  while($file = readdir($dh)) {
    if($file != "." && $file != "..") {
      if(is_dir("$dir/$file")) {
        echo "$file [DIR]<br>";
      } else {
        echo "$file (file)<br>";
      }
    }
  }
  closedir($dh);
}

Mit if(is_dir()) prüfen wir ob es sich bei dem Eintrag um einen Ordner handelt. Wenn ja, wird der Eintrag mit einem [DIR] dahinter ausgegeben. Wenn nicht, handelt es sich um eine Datei und der Eintrag wird mit einem (file) ausgegeben. Bisher haben wir aber nur den Ordner ausgelesen welchen wir bestimmt hatten. Uns interessieren aber auch noch die Unterordner und dessen Inhalte. Jetzt sind wir bei der Rekursivität angelangt. Wir werden, sofern es sich bei einem Eintrag um einen Ordner handelt unsere Funktion getDir() veranlassen sich selbst aufzurufen:

function getDir($dir) {
  $dh = opendir($dir);
  while($file = readdir($dh)) {
    if($file != "." && $file != "..") {
      if(is_dir("$dir/$file")) {
        echo "$file [DIR]<br>";
        getDir("$dir/$file");
      } else {
        echo "$file (file)<br>";
      }
    }
  }
  closedir($dh);
}

Nun ist das Ganze schon recht informativ, sieht aber sehr unübersichtlich aus. Eine lange Auflistung ohne Struktur. Wir werden nun die Ausgabe so formatieren dass jeder Unterordner und dessen „Inhalt“ eingerückt und mit einem – gekennzeichnet wird. Wir übergeben zu diesem Zweck eine Variable $pre mit dem gewünschten Startwert. mit $pre.= „-“ wird dieser Startwert bei jedem erneuten Aufruf der Funktion um den angegebenen Wert erweitert, was dazu führt dass jeder Unterordner mit seinem Inhalt eingerückt und markiert ist.

function getDir($dir,$pre) {
  $pre.= "-";
  $dh = opendir($dir);
  while($file = readdir($dh)) {
    if($file != "." && $file != "..") {
      if(is_dir("$dir/$file")) {
        echo "$pre $file [DIR]<br>";
        getDir("$dir/$file",$pre);
      } else {
        echo "$pre $file (file)<br>";
      }
    }
  }
  closedir($dh);
}

Javascript: Focus auf ein Element setzen

23. März 2009
<input type="text" name="fieldname" id="1">
<script type="text/Javascript" language="JavaScript">
  <!--
    document.getElementById("1").focus();
  //-->
</script>

Die besten Amiga 500 Spiele aller Zeiten

23. März 2009

Hier eine Liste der besten Amiga 500 Spiele aller Zeiten:

  • 1942
  • Agony
  • Apprentice
  • Arkanoid
  • Barbarian
  • Bomb Jack
  • Bubble Bobble
  • California Games
  • Die Kammern der Shaolin (Chambers of shaolin)
  • Chamonix Challenge
  • Chuck Rock
  • Chuckie Egg
  • Double Dragon
  • Flashback
  • Galaga
  • Gee Bee Air Rally
  • Ghost ´n Goblins
  • Giana Sisters
  • Hostages
  • IK+ (International Karate Plus)
  • Kaiser
  • Lemmings
  • Lotus Esprit Turbo Challenge
  • Lotus Esprit Turbo Challenge 2
  • Lotus Esprit Turbo Challenge 3
  • Maniac Mansion
  • Marble Madness
  • Mike the magic dragon
  • New Zealand Story
  • North & South
  • Oil Imperium
  • Ooops Up
  • Pacmania
  • PANG
  • Pirates
  • Populous
  • Powerstyx
  • Puffy´s Saga
  • Qwak
  • Railroad Tycoon
  • Rainbow Islands
  • Rasterbike
  • Rick Dangerous
  • Rick Dangerous 2
  • Robocop
  • Rocket Ranger
  • R-Type
  • R-Type 2
  • Shadow of the beast
  • Shufflepuck Cafe
  • Silkworm
  • Sim City
  • Skate of the art
  • Speedball
  • Speedball 2
  • Stuntcar Racer
  • Summer Games
  • Summer Games 2
  • Summer Olympiad
  • Super Wonderboy in Monsterland
  • Super HangOn
  • SWIV
  • Tanks
  • Testdrive
  • Tetrix
  • Toki
  • Tron
  • Turrican
  • Turrican 2
  • Wings of Fury
  • Wintergames
  • Winter Olympiad
  • Worldgames
  • Zak Mc Kracken

Die besten Automatenspiele aller Zeiten

23. März 2009

Hier eine Liste der besten Automatenspiele aller Zeiten: