Mysql как записать html код
Перейти к содержимому

Mysql как записать html код

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

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

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

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

Соответственно при выводе из базы на отображение необходимо обрабатывать текст вот так:

Такой алгоритм правильный или надо делать как-то по-другому?

Кодировка сайта utf8.

Вопрос очень простой, но в то же время очень характерный.

В нем отлично собраны наиболее популярные заблуждения начинающих пользователей РНР. Попробуем в них разобраться.

Хранение

Самое первое, что надо научиться — это не путать хранение данных и их использование в SQL запросах. Это совершенно разные вещи. По поводу хранения следует понимать, что храниться в БД могут абсолютно любые данные, и при этом храниться они должны как есть. То есть, для хранения их никак, вообще никак обрабатывать не нужно.

Следовательно, отвечая на поставленные в посте (не совсем корректные, как мы видим), вопросы:

  • Как хранить какие-либо данные в БД? Данные должны храниться как есть.
  • Как обрабатывать данные для БД? Никак. Ни в коем случае никак обрабатывать нельзя.
  • Как хранить HTML? Никаких особенных действий ни для HTML, ни для любых других данных производить не нужно. Все данные хранятся абсолютно одинаково.

Использование данных в SQL запросах.

А вот это уже совсем другой вопрос. Единственный, в ответ на который нам надо будет что-то делать. Но при этом сами данные мы всё равно трогать не будем. Да-да! Даже для помещения в SQL запрос мы никак данные обрабатывать не будем. Дело в том, что «совет для записи в базу использовать mysql_real_escape_string()» — это просто феерическая глупость, к сожалению, растиражированная в миллионах экземпляров.

А единственно правильный способ добавления данных в SQL запрос — это делать это через плейсхолдеры.

То есть, чтобы использовать любые данные в SQL запросе, надо сначала на их месте написать знаки вопроса:

это, кстати, касается вообще всех запросов. SELECT мы пишем точно так же:

после этого надо будет подготовить запрос, а потом выполнить его, передав переменные отдельно. Вот как это происходит на примере PDO:

то есть, идея такая: если нам надо подставить в запрос какую-либо переменную, вместо неё надо поставить знак вопроса. А саму переменную передать после.

Таким образом мы будем гарантированы от любых ошибок и неприятностей, поскольку РНР сам обработает за нас все переменные и сделает это правильно.

Спец-символы HTML

Я думаю, что внимательный читатель уже уловил идею: HTML вообще никакого отношения к БД не имеет. Ни малейшего. Это абсолютно разные вещи. То есть пользователю РНР никогда не должна приходить в голову идея использовать функцию, в которой встречается слово «HTML» для какой-либо работы с БД, а при работе с HTML — функцию, в которой встречается слово «mysql».

Функции для работы с HTML следует применять для работы с HTML.

То есть, если мы собираемся выводить HTML текст в HTML, то мы его должны выводить как есть.

Но если мы собираемся выводить в HTML текст, который не является HTML, мы должны отформатировать его так, чтобы он нам случайно не попортил верстку. Обычно для этого используется функция htmlspecialchars()

Кодировка

Если какой-либо символ сохраняется в виде знака вопроса, то это не проблема HTML кодирования, а проблема кодировки, которая попросту не поддерживает данный символ. Чтобы БД могла сохранять символы типа ⇔ , у нее должна быть кодировка utf8mb4 . А также РНР скрипт, устанавливая соединение с базой, должен выставлять кодировку этого соединения в utf8mb4 . При этом отображая пользователю форму, должен выдавать НТТР заголовк Content-type с кодировкой UTF-8 .

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

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

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

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

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

Кодировка сайта utf8.

  • Вопрос задан более трёх лет назад
  • 17396 просмотров
  • Facebook
  • Вконтакте
  • Twitter

FanatPHP

Ответ на вопрос из заголовка:
Никак особенно не хранить. Хранить абсолютно так же, как и любые данные, — как есть. То есть, НИКАК их не модифицируя для хранения.

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

Разбор вопроса:

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

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

Как записать в Бд html код

Не могу внести html код в базу данных, какое есть решение?

Рекомендуем хостинг TIMEWEB

Рекомендуем хостинг TIMEWEB
Подписчики
  • 2523
  • 0
  • 0
  • 0

А какие ошибки выдаёт при попытке внесения? Может не совсем правильный тип данных выбран для поля, в котором должен храниться html код?

  • 0
  • 0
  • 0

Строка для внесения содержит кавычки, может быть по этому?

  • 0
  • 0
  • 0
    Konstantin Lazarev
  • 1 июля 2017 г. 13:21

ммммм. Тогда проверить нужно, удалив кавычки из строки. Вообще, я не думаю, что проблема может быть в кавычках, если это спарсенный текста. А какой тип базы данных? SQLite?

  • 0
  • 0
  • 0

MySql использую, в OpenServere есть phpMyAdmin, туда и сохраняю

  • 0
  • 0
  • 0

Без кавычек все работает отлично. Добавляю тестовый текст, все вносится.

  • 0
  • 0
  • 0
    Konstantin Lazarev
  • 1 июля 2017 г. 13:49

Но проблема же с добавлением из под Qt? Правильно понимаю?

  • 0
  • 0
  • 0

Происходит парсинг страницы и запись кода в Бд. Может есть метод класса exec который делает учет кавычек?

  • 0
  • 0
  • 0
    Konstantin Lazarev
  • 1 июля 2017 г. 14:31

У QString есть метод toHtmlEscaped()

  • 0
  • 0
  • 0

Комментарии

Timeweb

Позвольте мне порекомендовать вам отличный хостинг, на котором расположен EVILEG.

В течение многих лет Timeweb доказывает свою стабильность.

Для проектов на Django рекомендую VDS хостинг

Поделиться в социальных сетях
Donate

Проект EVILEG перешёл на некоммерческую основу и будет развиваться исключительно на энтузиазме создателя сайта, энтузиазме пользователей, пожертвованиях и реферальной системе хостинга

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *