Ответ 1
Я использую библиотеку OWASP (ESAPI), чтобы избежать строк для разных типов отображения, используйте:
String html = ESAPI.encoder().encodeForHTML("hello < how > are 'you'");
String html_attr = ESAPI.encoder().encodeForHTMLAttribute("hello < how > are 'you'");
String js = ESAPI.encoder().encodeForJavaScript("hello < how > are 'you'");
HTML (предположим, jsp)
<tag attr="<%= html_attr %>" onclick="alert('<%= js %>')"><%= html %></tag>
Обновить (2017)
Поскольку ESAPI-кодеры считаются legacy, лучшая альтернатива была создана и активно поддерживается, я настоятельно рекомендую использовать OWASP Java Encoder.
Если ваш проект уже использует ESAPI
, добавлена интеграция, которая позволит вам использовать эту библиотеку для кодирования.
Использование объясняется на странице wiki, но, ради завершения, вы можете использовать его для контекстного кодирования ваших данных
// HTML Context
String html = Encoder.forHtml("u<ntrus>te'd'");
// HTML Attribute Context
String htmlAttr = Encoder.forHtmlAttribute("u<ntrus>te'd'");
// Javascript Attribute Context
String jsAttr = Encoder.forJavaScriptAttribute("u<ntrus>te'd'");
HTML (предположим, jsp)
<div data-attr="<%= htmlAttr %>" onclick="alert('<%= jsAttr %>')">
<%= html %>
</div>
PS: существует больше контекстов и поддерживается библиотекой