Чудеса с поведением htmlspecialchars

Статус
В этой теме нельзя размещать новые ответы.

doran7

Новичок
Решил проделать простой тест, ввести в форму спецсимволы:
&, ", ', <, >
потом пропустить содержимое поля ввода формы (textarea) через htmlspecialchars, сохранить в БД (MySQL), затем вывести из БД в браузер.
На этом этапе никаких чудес, я нормально вижу в браузере указанные символы, и в коде html-страницы коды этих символов:
&amp;, &quot;, &#039;, &lt;, &gt;

На втором этапе хочу проделать редактирование того, что сохранилось в БД. Для этого считываю из БД эти пять символов и помещаю их назад, в поле формы. Если не применять htmlspecialchars_decode, то ожидаю увидеть в поле формы:
&amp;, &quot;, &#039;, &lt;, &gt;
ведь именно это и хранится в БД и выводится в браузер. Но вижу в поле формы:
&, ", ', <, >
Но я-то htmlspecialchars_decode не применял. Не знаю что предположить. Или где-то, при чтении из БД, при помещении содержимого БД в поле формы, эти &amp;, &quot;, &#039;, &lt;, &gt; сами перекодировались в &, ", ', <, >, т.е. поле формы сработало как браузер. Или вообще не знаю, что думать. Для целей редактирования html-кодов, пропущенных через htmlspecialchars и сохраненных в БД, обратная перекодировка через htmlspecialchars_decode оказалась ненужной.
Не знаю, чем это объяснить. Может, кто знает, что это такое?
 

Фанат

oncle terrible
Команда форума
Ну вот не понимаю, как, как можно задавать вопросы типа
Или где-то, при чтении из БД,
?
Дядя с улицы должен тебе данные, полученные из БД, посмотреть и рассказать?
Самостоятельно не получается?
 

doran7

Новичок
doran7 сказал(а): ↑
Если не применять htmlspecialchars_decode, то ожидаю увидеть в поле формы:
&amp;, &quot;, &#039;, &lt;, &gt;
Click to expand...
Это неверно.
Я чую, что это неверно. Что ж получается, что при чтении из БД таких вещей как
&amp;, &quot;, &#039;, &lt;, &gt;
я и в окне браузера и в поле формы для редактирования получаю одно и то же:
&, ", ', <, >
без всякого обратного перекодирования через htmlspecialchars_decode ?
 

Dez

Новичок
doran7, все очень просто. В БД нельзя записывать данные, обрабатывая их через htmlspecialchars.
Их нужно ложить такими какие они есть, а htmlspecialchars использовать только при выводе данных на html страницу
 

doran7

Новичок
Посмотрел, что хранится в БД (через phpmyadmin):
Коды некоторых спецсимволов<br /><br />
&amp;, &quot;, &#039;, &lt;, &gt;<br />
Там все нормально. Но когда я это считываю в поле формы (предварительно удалив все <br />), то получаю готовенькие:
&, ", ', <, >
Не врубаюсь, как это получается.
Мой случай, конечно, не типовой - я храню в БД то, что пропустил через htmlspecialchars, а при выводе данных из БД в браузер htmlspecialchars не использую. Это не рекомендуется, но тем не менее.
 
Последнее редактирование:

doran7

Новичок
doran7, все очень просто. В БД нельзя записывать данные, обрабатывая их через htmlspecialchars.
Их нужно ложить такими какие они есть, а htmlspecialchars использовать только при выводе данных на html страницу
Почему же нельзя? Не рекомендуется, это да. Зато вывод готового html-кода из БД в браузер происходит гораздо быстрее. Естественно, редактировать это дело сложнее. Но я сделал обратный парсер, все работает, и даже все html-коды, правда при обратном парсинге для редактирования этих самых спецсимволов пришлось отбросить htmlspecialchars_decode, за ненадобностью. Это я пока ничем объяснить не могу. Хотя, все работает, без нее. Проверял многократно.
 

doran7

Новичок
Сам намерял или пацаны на раёне сказали?
На нагруженном сайте это сказывается, лишняя процедура - пропустить текст какой-нибудь статьи при выводе ее из БД через htmlspecialchars - хоть небольшое время, но отжирает. Это заметно сказывается, когда сайт просматривают сотни и тысячи юзеров в секунду. А если эту процедуру при выводе (при просмотрах сайта) исключить, то все работает быстрее, и нагрузка на сервер при просмотрах заметно снижается. Редактирование становится сложнее, но редактирование по сравнению с просмотрами гораздо более редкое действие.
 

Фанат

oncle terrible
Команда форума
А, так у тебя есть сайт, который просматривают сотни юзеров в секунду.
Это меняет дело. Ты определённо знаешь, о чём говоришь.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Может в юмор?

PS: схожу за попкорном)
 

doran7

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

Вопрос-то меня в другом был, почему текст и коды, пропущенные через htmlspecialchars, и хранящиеся в БД в виде, полностью готовом для вывода в браузер, при редактировании попадают в поле формы редактирования текста и кода в том виде, в каком я описал в первом посте этой темы.
 

AmdY

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

p.s. чем больше сталкиваюсь с хайлодами и хайлодовцами, тем больше хочется им сломать руки, любое гавно оправдывают высокими нагрузками.
 

Dez

Новичок
Вопрос-то меня в другом был, почему текст и коды, пропущенные через htmlspecialchars, и хранящиеся в БД в виде, полностью готовом для вывода в браузер, при редактировании попадают в поле формы редактирования текста и кода в том виде, в каком я описал в первом посте этой темы.
еще раз примени htmlspecialchars при выводе в форму. А при обработке сабмита формы редактирования уже не используй htmlspecialchars.
 

Фанат

oncle terrible
Команда форума
p.s. чем больше сталкиваюсь с хайлодами и ми, тем больше хочется им сломать руки, любое гавно оправдывают высокими нагрузками.
А эти люди, с которыми ты сталкивался - вот прямо так тебе и говорили, что "мы", мол, "хайлоад"?
 
Последнее редактирование:

hell0w0rd

Продвинутый новичок
Холиварная тема, но нет оправдания людям не использующим шаблонизатор:)
 

AmdY

Пью пиво
Команда форума
Фанат
конечно, поди сейчас найди программиста, который не пишет хайлоды, больная это тема.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху