Vi sono molte guide online che lo spiegano e diverse tecniche.
Una delle più semplici consiste nell'effettuare il parsing del testo ed usare un elenco di caratteri da sostituire con le "faccine":
codice:
":)" , ":-)" , ":D" ... etc...
Vi sarà poi una parte di codice che andrà ad eliminare la porzione testuale e ad inserire l'elemento IMG che punti alla faccina corrispondente.
Il tutto realizzabile in PHP.