Редактирование экранированного кода (для отображения)
Вопрос
Если я экранирую некоторый код, потому что я хочу, чтобы он отображался как фактический код в html (например, для примера фрагмента кода), сохраните его в базе данных и затем перетащите его обратно в редактор (html-страницу), это отображается как HTML, в отличие от экранированного текста.
Моя проблема возникает, когда я включаю тег texttarea в текст, потому что он преждевременно закроет область редактирования и отрежет остальную часть того, что я пишу, когда она сохранена (или больше, если я не закрываю тег). р>
Итак, мой вопрос: это предполагаемое поведение со стороны браузера? - GT &; Так что мне нужно экранировать текст (возможно, код и предварительные теги)? каждый раз, когда я хочу внести в него изменения? Или я что-то не так делаю?
* Обратите внимание, что я единственный, кто использует это, и это в основном только для обучения, поэтому я не беспокоюсь о аспекте безопасности, а о том, как проверять мне нужно обрабатывать мой HTML при использовании его в браузере и иметь он ведет себя ожидаемым образом.
Решение
@Bob: htmlentities () отличается от htmlspecialchars ()
htmlentities () преобразует каждый символ с кодом ASCII в этот код. htmlspecialchars () будет делать только те, которые являются особыми в HTML, такие как & amp ;, quotes и < или >
Это довольно существенное различие, которое может сломать некоторые вещи, а также может привести к огромным результатам при использовании htmlentities ().
Другие советы
По моему опыту, вам нужно сделать какие-то специальные экранирующие символы. В PHP функция это htmlspecialchars (). Я не знаю о других функциях. Но в окне обзора будут правильно отображаться закодированные символы в текстовой области.
Большинство веб-языков имеют некоторые библиотечные функции для экранирования символов, интерпретируемых HTML, поэтому проверьте документацию для языка, который вы используете.
Как сказал Дэррил, html_entities () (который является псевдонимом для htmlspecialchars ()) добьется цели в PHP.
Это предполагаемое поведение со стороны браузера? Да, браузер интерпретирует ваш (неэкранированный) HTML-код как HTML-теги, принадлежащие странице, и воздействует на них.
Так что мне нужно экранировать текст (возможно, код и предварительные теги)? Да, как сказал Дэррил Хейн, используйте htmlspecialchars (). Они будут правильно отображаться браузером, и вам не нужно & Quot; unescape & Quot; данные в том виде, в каком они возвращаются после редактирования.
... я что-то не так делаю? Вы должны проверить любые входные данные, поступающие в ваше приложение или покидающие его, и посмотреть, есть ли в нем какие-либо символы, которые имеют особое значение для браузера, для сервера базы данных и для других частей вашего решения. Вы должны правильно экранировать специальные символы для каждого взаимодействия (например, mysql_escape_string () для базы данных MySQL, htmlspecialchars () для HTML и т. Д.)