Ваш вопрос - прекрасный сборник недоразумений. Вам удалось все запутать.
Попробуем разобраться.
Как лучше всего хранить специальные символы (например, следующие) в базе данных MSQUL с помощью PHP, чтобы избежать инъекций?
Это несравненные вещи. Одно дело хранить специальные символы, а другое - избегать инъекций. совершенно другой.
$book_text=htmlentities($book_text, "ENT_QUOTES");
это самая забавная часть. Хотя он предназначен для защиты ваших запросов, на самом деле он ничего не делает. Поскольку вместо константы ENT_QUOTES, значение которой равно 3, вы используете строку ENT_QUOTES, числовое значение которой равно 0, поэтому вы не устанавливаете флаг.
Но даже если вы установите этот флаг правильно, он не защитит вас автоматически. Потому что код внедрения не может содержать специальных символов.
Чтобы избежать инъекций, вы должны соблюдать весь набор правил, а не одну простую функцию make_my_data_safe (). Волшебной палочки нет.
Подробнее см. этот мой ответ.
Что касается спецсимволов, тут все просто. Единственная проблема в том, что там НЕТ твердых спецсимволов. Для разных сред существуют разные специальные символы.
- 'имеют значение для базы данных и HTML
- ‹> Имеют значение только для HTML
- é à ù имеют значение только для HTML, зависит от кодировки.
вы должны использовать разные правила форматирования для каждого случая. Разные, а не единые для всех.
чтобы использовать символы é à ù с HTML, вы должны установить правильный HTTP-заголовок. чтобы использовать é à ù с базой данных, вы должны установить кодировку таблицы на utf8 и кодировку соединения на utf 8.
person
Your Common Sense
schedule
12.04.2012
"ENT_QUOTES"
должен бытьENT_QUOTES
(без кавычек), потому что это предопределенная константа PHP. И я подумал, что вы можете поместить его в исходном виде в БД, и когда вы хотите повторить его, вы используетеhtmlentities
- person Wouter J   schedule 12.04.2012