Вы разрешаете клиентам помещать в сообщения html-код - изображения. А для того чтобы смайлы работали они в сообщениях должны быть как есть. Это означает, что нельзя пропустить сообщение через htmlspecialchars перед выводом клиенту, что делается обязательно, чтобы не допустить на странице XSS атак. А значит любой ушлый может поместить в него куда белее вредное, нежели картинку.
Вам придется разбирать посредством рег. выражений каждый пост, отсеивая разрешенное и запрещенное. То есть ваш подход, это не лучшее, что можно сделать. Визуальные редакторы тоже используют подобное решение, но только серверу отправляется textarea, которая на время работы редактора "в тени", а данные которые в нее пишет визуальный редактор обрабатываются.
В простейшем случае таким же образом можно писать в textarea (в фоновом режиме) не html-теги, а ВВ-теги. Можно вообще без тегов обойтись, а писать

, :0), ... А в div (панели сообщения) естественно будет смайл. В этом случае форма отправляет текст, который без проблемы можно обработать htmlspecialchars, и заменить ВВ-теги или мнемоники на смайлы.
При этом при отключенном JS форма будет работать обычным способом, ваша же не сможет отправить сообщения.