Я думаю, что ряд других ответов пропустили очевидную проблему ...
Вы используете mysql_real_escape_string для введенного содержимого (как следует, если не используете подготовленные операторы).
Ваша проблема с выводом.
В настоящее время проблема заключается в том, что вы вызываете html_entity_decode. Просто полоски - это все, что вам нужно для восстановления исходного текста. html_entity_decode - это то, что портит ваши цитаты и т. д., так как они меняют их. Вы действительно хотите выводить html, а не просто текст (когда вы используете html_entities и т. Д.). Вы декодируете то, что хотите закодировать.
Если вы хотите, чтобы отображалась только текстовая версия, вы можете использовать объекты. Если вас беспокоят плохие теги, используйте стрип-теги и разрешите использовать только те теги, которые вам нужны (например, b, i и т. Д.).
Наконец, не забудьте кодировать и декодировать в правильном порядке. если вы запустили mysql_real_escape_String (htmlentities ($ str)), то вам нужно запустить html_entity_decode (stripslashes ($ str)). Порядок операций имеет значение.
ОБНОВЛЕНИЕ: я не осознавал, что html_entity_decode также удаляет косые черты. Это не было четко задокументировано на этой странице, и я просто никогда этого не замечал. Я все равно буду автоматически запускать его, так как большинство HTML, которые я представляю, я хочу оставить как сущности, и даже когда я этого не сделаю, я предпочитаю принимать это решение за пределами моего класса DB, в каждом конкретном случае. Таким образом, я знаю, что косые черты исчезли.
Похоже, что оригинальный постер работает с htmlentities (или его программа ввода, как это делает tinymce для него), и он хочет вернуть его обратно к содержанию. Таким образом, html_entity_decode ($ Str) должен быть всем, что требуется.