如何用图像替换文本中的表情符号,如:)?

时间:2012-08-04 11:07:28

标签: java jsf-2 primefaces

我想在我的JSF / PrimeFaces Web应用程序中将smilies显示为图像。为此,我需要将:)等文本替换为图像。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

JSF不为此提供任何设施。

最简单的方法是,您可以使用the available methods of the String classString实例执行操作,例如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()); 标记!)