Показать сообщение отдельно
  #1 (permalink)  
Старый 09.11.2008, 19:14
Новичок на форуме
Отправить личное сообщение для Aristarco Посмотреть профиль Найти все сообщения от Aristarco
 
Регистрация: 09.11.2008
Сообщений: 2

Аналог WYSIWYG
Уважаемые формчане, нужна ваша помощь.

Есть гостевая книга(или тп, не суть) с простейшим механизмом вставки смайликов, таким же, как и на этом форуме - банальная вставка кода смайла типа ":cool:". При выводе страницы этот код заменяется PHP скриптом на изображение.

Но некоторые смайлики просто невозможно "выразить" обычными символами(даже тот же ":cool:"), поэтому хочется сделать визуальный редактор сообщений, чтобы пользователи сразу видели, какой смайлик стоит в сообщении, и как оно вообще выглядит.

Естественно, есть проблема: нельзя отправлять php-скрипту готовый HTML код. То есть отправляться должно сообщение, в котором смайлики будут заменены на свои коды, то есть по сути отправляемый текст будет таким же, как и при отправке из простой textarea.
Я вижу 2 варианта решения этой проблемы:
1.Иметь скрытый input, в котором будет "чистый"(без тегов) текст для отправки и отлавливать нажатия клавиш в редакторе. То есть юзер печатает сообщения, а скрипт отлавливает всё, кроме смайликов и вставляет в скрытый инпут. Отдельный скрипт вставки смайлика будет добавлять изображение в редактор и код в скрытый инпут.
2.Конкретно при отправке формы будет вызываться скрипт, который будет парсить готовый код из редактора, заменяя в нем изображения на коды смайликов.
Естественно, с обоими способами есть проблемы:
1.Юзер может стирать сообщение, делать вставку из буфера, вырезать в буфер и тд и тп. Отследить всё будет если реально, то очень сложно. +отследить удаление изображения из редактора я вообще не знаю как.
2.Просто не знаю как реализовать. По идее, ничего сложного: регулярным выражением найти все изображения, и, если есть такой смайл, то заменить на код, а если нет - просто удалить. Но как проверить, является ли картинка именно смайлом?


Javascript'исты, прошу вашей помощи! Принимаются как другие варианты, так и готовые решения и код.

п.с. Javascript знаю плохо.
Ответить с цитированием