почему escape-символы отображаются в HTML? - PullRequest
1 голос
/ 12 января 2012

Мне нужно экранировать текст перед отображением содержимого на веб-странице, и на самом деле это делается правильно.Однако, когда я отображаю строку в html, escape-символы все равно будут отображаться.Вот такой пример:

hello there my ni&%ame is + - && !

и соответствующая строка с экранированием выглядит следующим образом:

hello there my ni&%ame is + - && !

Я где-то читал, что ядро ​​в taglib будет экранировать только базовыетакие как>, <, ", \ t и пробел. однако ни одна из этих escape-последовательностей не удаляется из HTML-кода. Кто-нибудь из вас знает, как быть в состоянии решить эту проблему, пожалуйста? спасибо </p>

заНиже приведена часть кода, используемого для преобразования определенного символа в его escape-символ:

while (character != CharacterIterator.DONE ){
         if (character == '<') {
           result.append("&lt;");
         }
         else if (character == '>') {
           result.append("&gt;");
         }
         else if (character == '&') {
           result.append("&amp;");


                } .....
       return result;
}

экранирующая часть выполнена и работает отлично. Проблема возникает, когда я пытаюсь отобразить строку с экранированными символами наHTML-страница

Ответы [ 2 ]

3 голосов
/ 12 января 2012
if (character == '<') {
    result.append("&lt;");
}
else if (character == '>') {
    result.append("&gt;");
// ...

Удалите это. Тебе это не нужно. JSTL <c:out> уже выполняет эту работу.

<c:out value="${someBean.someProperty}" />

В противном случае ваша HTML-строка дважды экранируется Каждый & снова становится &amp; и так далее. Если вам действительно нужно взять спасение в свои руки (почему?), Тогда вообще не используйте <c:out>:

${someBean.someProperty}

или отключите его экранирование с помощью escapeXml="false":

<c:out value="${someBean.someProperty}" escapeXml="false" />
1 голос
/ 12 января 2012

BalusC прибил его.

Пара дополнительных очков:

  • Если у вас возникают проблемы с неправильным отображением веб-страниц, вам нужно посмотреть на необработанный HTML-код с помощью функции «Просмотр источника» вашего веб-браузера. В этом случае он показал бы двойное побег и быструю реализацию проблемы.

  • В HTML вам нужно только нужно для экранирования <, > и &. Другие символы должны работать очень хорошо, при условии, что ваш HTML кодируется в UTF-8 (и тип контента тоже так говорит).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...