0

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

4

1 回答 1

2

JSF 不为此提供任何工具。

在最简单的情况下,您可以只使用的可用方法对String实例执行操作String,例如replace().

text = text.replace(":)", "<img src=\"smile.png\" />");

(您可能希望应用更细粒度的匹配,可能使用正则表达式或词法分析器,以防止诸如“......分号;(或冒号,:)......”之类的合法字符序列被错误地替换)

然后,要在 JSF 中显示带有 HTML 图像的被操纵String实例,您需要使用设置为<h:outputText>escape属性false来禁用用于防止 XSS 攻击漏洞的内置 HTML 转义。

<h:outputText value="#{bean.text}" escape="false" />

这样,<img>由于转义,HTML 元素将由网络​​浏览器逐字解释,而不是向最终用户显示纯文本。

但是,正如您可能已经猜到的那样,如果您事先不清理最终用户的输入,这当然会打开可能的XSS 攻击漏洞。最终用户将能够通过输入来做坏事,例如<script>stealCookies()</script>在文本中添加一个也将由网络浏览器逐字解释的内容。要事先清理最终用户的输入,您可以使用Jsoup等,它为此提供了一种clean()方法:

text = Jsoup.clean(text, Whitelist.basic());

(在替换表情符号之前执行此操作,否则也可能会剥离这些<img>标签!)

于 2012-08-04T17:37:37.433 回答