JSTL экранирование специальных символов - PullRequest
27 голосов
/ 26 мая 2011

У меня странная проблема со спецсимволами.В JSP я использую имя поля в качестве идентификатора, и имя может быть что-то вроде

id="<1 and &>2" (OR)
id="aaa & bbb"

У меня нет никакой другой возможности использовать идентификаторы, кроме имен, что единственное, что я получаю от бэкенда.

Итак, есть ли логика для удаления всех специальных символов с помощью JSTL.В настоящем сценарии в JS я сделаю несколько операций с идентификатором.это вызывает много проблем для каждого типа браузера.

Пожалуйста, предложите, заранее спасибо ...

Ответы [ 4 ]

48 голосов
/ 26 мая 2011

JSTL предоставляет два способа экранирования специальных символов HTML:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
...
<c:out value="${myName}"/> 

и

${fn:escapeXml(myName)}

Оба преобразуют специальные символы в соответствующие им объекты HTML: (< становится &lt;, & становится &amp; ...).

Обратите внимание, что идентификаторы должны быть закодированы в HTML, но не в JavaScript.

21 голосов
/ 11 мая 2012

Я думаю, что ваш вопрос был неправильно понят.Я пришел в тот же момент, что и вы, и решил проблему с помощью excapeXml = "false".

<c:out value="${id}" escapeXml="false"/> 

У меня были данные в базе данных, например:

и escapeXml = "false" заставили их отобразить

<Hello World>
2 голосов
/ 26 мая 2011

Я думаю, это то, что вы любите

Используйте Spring's HtmlUtils.htmlEscape (String input).

1 голос
/ 15 сентября 2014

Я только что столкнулся со сценарием, в котором мне нужно было убежать », то есть в одиночной кавычке, кроме других специальных символов.В этом случае fn: escapeXml не удалось.Поэтому я использовал JavaScriptUtils.javaScriptEscape () из Spring API, создал тег и применил его.Теперь проблема решена.Я также ссылался на URL: http://www.coderanch.com/t/528521/JSP/java/Passing-JSTL-variable-special-characters.

...