Экранирование HTML внутри тегов комментариев

экранирование html нормально - оно удалит <, > и т. д.

Я столкнулся с проблемой, когда я выводил имя файла внутри тега комментария, например. <!-- ${filename} -->

конечно, все может быть плохо, если ты не сбежишь, так что это становится: <!-- <c:out value = "${filename}"/> -->

проблема в том, что если у файла есть "-" в имени, весь html будет испорчен, так как вам не разрешено иметь <!-- -- -->.

стандартный escape-код html не избегает этих тире, и мне было интересно, знаком ли кто-нибудь с простым / стандартным способом их избежать.

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
6
0
5 552
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Определение комментария HTML:

A comment declaration starts with <!, followed by zero or more comments, followed by >. A comment starts and ends with "--", and does not contain any occurrence of "--".

Конечно, анализ комментария зависит от браузера.

Ничто не кажется мне очевидным решением, поэтому я предлагаю вам str_replace эти двойные черточки.

Нет хорошего способа решить эту проблему. Вы не можете просто избежать их, потому что комментарии читаются в виде открытого текста. Вам нужно будет сделать что-то вроде пробела между дефисами или использовать какой-то код для дефисов (например, [HYPHEN]).

Не существует универсального рабочего способа избежать этих символов в html, если символы - не кратны четырем, поэтому, если вы это сделаете - он не будет работать в firefox, но ---- будет работать. Так что все зависит от браузера. Например, если посмотреть на Internet Explorer 8, это не проблема, эти символы экранированы правильно. То же самое и с Googles Chrome ... Однако Firefox, даже в последней версии браузера (3.0.4), плохо справляется с экранированием этих символов.

Поскольку очевидно, что вы не можете напрямую отображать '-', вы можете либо закодировать их, либо использовать теги fn: escapeXml или fn: replace для соответствующей замены. Документация JSTL

Вы не должны пытаться использовать HTML-экранирование, содержимое комментариев не экранировано, и вполне нормально иметь внутри пустые символы «>» или «&».

«-» - это отдельная, не связанная с этим проблема, и ее на самом деле не исправить. Если вам не нужно восстанавливать точную строку, просто выполните замену, чтобы избавиться от них (например, замените на ‘__’).

Если вам действительно нужно передать строку через полностью незатронутый JavaScript, который будет читать содержимое комментария, используйте строковый литерал:

<!-- 'my-string' -->

который сценарий затем может прочитать с помощью eval (commentnode.data). (Да, наконец-то допустимое использование eval ()!)

Тогда ваша проблема с экранированием сводится к тому, как поместить вещи в строковые литералы JS, что довольно легко решить, экранируя символы ‘'’ и ‘-’:

<!-- 'Bob\x27s\x2D\x2Dstring' -->

(Вероятно, вам также следует экранировать символы «<», «&» и «» », если вы когда-нибудь захотите использовать ту же схему экранирования, чтобы поместить строковый литерал JS внутри блока <script> или встроенного обработчика.)

Другие вопросы по теме