экранирование html нормально - оно удалит <, > и т. д.
Я столкнулся с проблемой, когда я выводил имя файла внутри тега комментария, например. <!-- ${filename} -->
конечно, все может быть плохо, если ты не сбежишь, так что это становится:
<!-- <c:out value = "${filename}"/> -->
проблема в том, что если у файла есть "-" в имени, весь html будет испорчен, так как вам не разрешено иметь <!-- -- -->.
стандартный escape-код 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> или встроенного обработчика.)