Правильный способ хранения текста и HTML-кода в базе MySQL?

Каким образом необходимо обрабатывать текст и html-код для записи в базу MySQL? Какая схема?

Перерыл интернет, везде совет для записи в базу использовать mysql_real_escape_string(), и больше вроде ничего не нужно. Но как быть со спец-мисволами html? К примеру "⇔" при вставке в форму отображается как символ, а не как html-код сивола. Соответственно при записи в базу, он превращается в "?"

Как я понимаю необходимо обрабатывать текст вот так перед вставкой:
$inputText = htmlentities($inputText, ENT_NOQUOTES, 'UTF-8');
$inputText = mysql_real_escape_string($inputText);

Соответственно при выводе из базы на отображение необходимо обрабатывать текст вот так:
$inputTex = html_entity_decode($inputTex);
Такой алгоритм правильный или надо делать как-то по-другому?

Кодировка сайта utf8.
  • Вопрос задан
  • 19568 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Ответ на вопрос из заголовка:
Никак особенно не хранить. Хранить абсолютно так же, как и любые данные, - как есть. То есть, НИКАК их не модифицируя для хранения.

Решение конкретно твоей проблемы:
mysql_set_charset('utf8'); после коннекта
+
плюс таблицы должны иметь кодировку utf8
Подробнее: phpfaq.ru/charset

Разбор вопроса:
везде совет для записи в базу использовать mysql_real_escape_string(),

Это информация устарела и не соответствует действительности.
Единственно правильным вариантом добавления данных в запрос являются подготовленные выражения.

Как я понимаю необходимо обрабатывать текст вот так перед вставкой:

Неправильно понимаешь.
Перед вставкой текст обрабатывать не надо вообще никак.
Для корректной работы SQL, как я уже писал выше, должны использоваться подготовленные выражения.
HTML же к SQL не имеет ни малейшего отношения. и никакая HTML функция, разумеется, при сохранении в БД использоваться не должна.

К примеру "⇔" при записи в базу превращается в "?"

Вот с этого и надо было начинать. У тебя проблема с кодировками.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
saboteur_kiev
@saboteur_kiev
software engineer
Есть подозрение что в самой базе у вас таблицы не в UTF-8, поэтому символы и портятся.
Никаких особых действий не нужно делать, в sql текст html хранится без проблем.
Ответ написан
Комментировать
Поддержу Василий и Анатолий K - не нужно хранить html в базе.
Я знаю что многие CMS, даже популярные, так делают. Некоторые пихают в БД картинки и даже код.
Но все это либо результат либо глупости, либо спешки. Нет никаких причин хранить в БД html если этого можно хоть как-то избежать.
Ответ написан
Правильный ответ - не храните статичное в БД, вы же не храните там JS и CSS и версионировать неудобно. Если таки надо, что бы пользователь мог куски HTML править (например пользовательская шапка для его блога), то надо постараться держать все в UTF-8 и экранировать потенциальные MySQL-инъекции. Но и даже тут, лучше пусть в файлах все будет.
Ответ написан
Denormalization
@Denormalization
Для данных в которых могут быть спецсимволы (изображения, текст) я обычно перед отправкой в базу использую base64_encode.
Вообще делать htmlentities перед записью в БД нет большого смысла. Данные нужно экранировать во view перед выводом.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы