PHP mysql_query возвращает декодированные закодированные данные

#php #mysql #search

#php #mysql #Поиск

Вопрос:

Я использовал htmlspecialchars в столбце в моей базе данных под названием ‘Description’.

На моем веб-сайте есть страница поиска, которая возвращает результаты, используя это предложение mysql_query:
«ВЫБЕРИТЕ * ИЗ db.db, ГДЕ NameOfEvent ИМЕЕТ ВИД ‘%».$ q.»%'»

Я добавил в базу данных следующую строку: « testamp;test «.
поскольку я использовал htmlspecialchars, в базе данных это будет выглядеть так: « testamp;amp;test «

Если я введу ‘a’ при поиске, одним из результатов будет testamp; проверка… как я могу этого избежать?

Ответ №1:

Не сохраняйте свои значения с помощью htmlspecialchars() . Это следует использовать для вывода / отображения.

Если необходимо, рассмотрите возможность сделать это в дополнительном столбце, т. е. formatted_description . Таким образом, вы все еще можете выполнять поиск по description .

Вероятно, это не тот ответ, который вы хотите. Но…

Комментарии:

1. Не должно быть никаких «если вы должны»! Не храните материал, подобный этому HTML, закодированный в базе данных.

2. @Jame C, полностью согласен. Просто пытаюсь что-то предложить оператору. Не делайте этого , это не лучший ответ. 🙂

3. я не был с вами не согласен, просто был менее вежлив!

4. Я сохранил данные в закодированном виде, потому что подумал, что так будет лучше, если это не имеет значения, то у меня нет причин хранить их в закодированном виде. Я буду декодировать данные и кодировать их только тогда, когда захочу их отобразить. Спасибо

Ответ №2:

Вы должны хранить данные в своей базе данных в незашифрованном виде, а затем использовать для них htmlspecialchars, когда получите их обратно, перед отображением.

В нынешнем виде вам пришлось бы перепрыгнуть через препятствия, чтобы ваш поиск ‘%a%’ был проигнорирован amp;amp; .

Ответ №3:

Вы не можете изменить способ, которым MySQL выполняет поиск строк в таблицах. Вы можете просто изменить способ сохранения строк в ваших полях. Возможно, вы могли бы попытаться сохранить текст в поле описания без использования htmlspecialchars(). И использует его сразу после извлечения из базы данных.