Para un "smile" con un str_replace() te sobra ... para la parte puramente PHP .. El hecho de que pulses sobre el icono en concreto y en el textarea se represente con algún còdigo es taréa de javascript integramente.
Ejemplo (PHP) ..
Si tu rutina javascript incrusta en tu textarea que posteriormente almacenas en tu BD o donde corresponda un código tal que:
[:)]
En PHP tan sólo tienes que aplicar un str_replace() tipo
Código PHP:
<?
$mensaje="Hola estoy [:)]";
$mensaje=str_replace($mensaje,'[:)]','<img src="feliz.gif">');
echo $mensaje;
?>
Esto es muy simple .. pero es la base .. si tienes más smiles puedes usar arrays (asociativos tipo mile=>imagen) y bucles para sustituir todos los smiles (codigos) que aparezcan en tu mensaje (cadena/string) (tambien creo que puedes pasarle un array a str_replace() si mal no recuerdo)
Un saludo,