Я думаю, что в ряде других ответов пропущена очевидная проблема...
Вы используете 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) должно быть всем, что требуется.
person
Cryophallion
schedule
04.04.2010