Hmm, hab gerade so überlegt... Wenn du die Smilies _wirklich_nur_durch_Zahlen ersetzen willst, kannst du es auch ganz billig machen: Smilies in ein Array, dieses Array mit foreach durchlaufen und in jedem Durchlauf mittels str_replace() das Smilie durch seine Position im Array ersetzen.
So vielleicht...
$replace = array(1 => ':-)', ':-(', ... );
foreach ($replace as $key => $val) {
$src = str_replace($val, "<img src="$key.gif">", $src);
}
Wobei $src deine zu bearbeitende Zeichenkette wäre.