我想在我的 JSF/PrimeFaces Web 应用程序中将表情符号显示为图像。为此,我需要:)
用图像替换文本。我怎样才能做到这一点?
问问题
796 次
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 回答