我想在我的JSF / PrimeFaces Web应用程序中将smilies显示为图像。为此,我需要将:)
等文本替换为图像。我怎样才能做到这一点?
答案 0 :(得分:2)
JSF不为此提供任何设施。
最简单的方法是,您可以使用the available methods of the String
class对String
实例执行操作,例如replace()
。
text = text.replace(":)", "<img src=\"smile.png\" />");
(您可能希望应用更精细的匹配,可能使用正则表达式或词法分析器,以防止合法的字符序列,例如“......分号;(或冒号,: )...“被错误地替换了)
然后,要在JSF中使用HTML图像呈现被操纵的String
实例,您需要使用<h:outputText>
属性设置为escape
的{{1}}来禁用内置的HTML-escaping,用于防止XSS攻击漏洞。
false
这样,HTML <h:outputText value="#{bean.text}" escape="false" />
元素将由webbrowser逐字解释,而不是由于转义而向最终用户显示明文。
但是,正如您可能已经猜到的那样,如果您事先没有清理最终用户的输入,那么当然可以打开XSS attack holes。最终用户可以通过输入执行不好的操作,例如向文本添加<img>
,这也将由webbrowser逐字解释。要事先清理最终用户的输入,您可以使用其中Jsoup提供clean()
方法:
<script>stealCookies()</script>
(在替换表情符号之前执行此操作,或者也可以删除这些text = Jsoup.clean(text, Whitelist.basic());
标记!)