我想在我的 JSF/PrimeFaces Web 应用程序中将表情符号显示为图像。为此,我需要将 :)
之类的文本替换为图像。我怎样才能实现这个目标?
最佳答案
JSF 不为此提供任何设施。
最简单的是,您可以使用 the available methods of the String
class对 String
执行操作实例,例如 replace()
.
text = text.replace(":)", "<img src=\"smile.png\" />");
(您可能希望应用更细粒度的匹配,也许使用正则表达式或词法分析器,以防止合法的字符序列,例如“...分号;(或冒号,: ) ...”被错误地替换)
然后,呈现被操纵的String
在 JSF 中包含 HTML 图像的实例,您需要使用 <h:outputText>
与 escape
属性设置为 false
禁用内置的 HTML 转义,该转义用于防止 XSS 攻击漏洞。
<h:outputText value="#{bean.text}" escape="false" />
这样 HTML <img>
由于转义,元素将由网络浏览器按字面解释,而不是向最终用户显示纯文本。
但是,正如您可能已经猜到的那样,这当然是可能的 XSS attack holes如果您不事先清理最终用户的输入,请打开。最终用户可以通过输入做坏事,例如添加 <script>stealCookies()</script>
也可以由网络浏览器按字面解释的文本。要预先清理最终用户的输入,您可以使用 Jsoup 等。其中提供 clean()
方法:
text = Jsoup.clean(text, Whitelist.basic());
(在替换表情符号之前执行此操作,否则它也可能会删除那些 <img>
标签!)
关于java - 如何替换文本中的表情符号,例如 :) with an image?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11808147/