java - 如何替换文本中的表情符号,例如 :) with an image?

标签 java jsf-2 primefaces

我想在我的 JSF/PrimeFaces Web 应用程序中将表情符号显示为图像。为此,我需要将 :) 之类的文本替换为图像。我怎样才能实现这个目标?

最佳答案

JSF 不为此提供任何设施。

最简单的是,您可以使用 the available methods of the String classString 执行操作实例,例如 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/

相关文章:

java - 正则表达式检测 html 标签并替换一些

java - 如何在 primefaces jsf 中连接旋钮

jsf - 如何在 Java EE 项目中集成带有 facebook 按钮的登录?

java - 检测 Java 反射

java - 如何修复我的 super 报表?

java - 是否可以使用 Firebase Admin SDK 将消息发送到 FCM 客户端的一批 token ?

java - 如何在 JSF 页面中包含 servlet

exception-handling - JSF PostConstruct 异常处理 - 重定向

jsf-2 - 如何将方法参数传递给 ActionListener?

jsf - 加载表内容时隐藏 Primefaces 数据表 'No Records Found'