Sieht soweit fast richtig aus.
Das 'fast' ist in der for-Schleife: Du liest immer wieder aus $_REQUEST['message'] aus und speicherst das in $out Es wird also so sein, dass er die Smilies richtig ersetzt, nur wird im nächsten Durchlauf wieder der Originalstring genommen. Also einfach vor der Schleife $out=$_REQUEST['message']; machen und dann klappt das wohl auch.
Ein Tipp: Das Auslesen des Verzeichnisses solltest Du nur ausführen, wenn neue Smilies aufgenommen werden. Du entlastest den Server und (wenn es viele Smilies werden) die Nerven der Besucher. Daher einfach die Dateinamen auslesen und in einer Datei speichern. Idealerweise gleich so:
PHP-Code:
<?php
$smilie[]='grins';
$smilie[]='dummgugg';
...
?>
Dann kannst Du die Datei einfach einbinden und auf das Array zugreifen.