2008-11-26 3 views
4

спасаясь HTML прекрасно - он удалит < «с и >» s и т.д.избежать HTML внутри тегов комментариев

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

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

проблема заключается в том, что если файл имеет «-» во имя, все HTML получает ввинчивается, так Youre не разрешено иметь <!-- -- -->.

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

ответ

5

Definition of a HTML comment:

Комментарий начинается с объявления <, за которым следуют ноль или более комментариев, а затем >!. Комментарий начинается и заканчивается символом «-» и не содержит никакого «-».

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

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

0

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

0

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

0

Поскольку вы не можете напрямую отображать символ «-», вы можете либо закодировать их, либо использовать fn: escapeXml или fn: заменить теги для соответствующих заметок. JSTL documentation

0

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

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

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

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

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

Тогда ваша спасаясь проблема становится, как положить вещи в JS строковых литералов, что является довольно легко разрешимы спасаясь от «» «и„-“символы:

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

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

Смежные вопросы