【问题标题】:How should I handle HTML Entities in JSF我应该如何处理 JSF 中的 HTML 实体
【发布时间】:2011-08-23 23:07:52
【问题描述】:

我正在升级一个以 MySQL 数据库为后端的 PHP 编写的旧 Web 程序。

数据库里满是这样的文字<P><STRONG>

这显然是<P><STRONG><FONT size=4>的编码形式

我怎样才能获得一个 JSF 文件来正确呈现它?将其作为转义文本输出给我第一行,非转义文本给我第二行。

我希望 HTML 在文档中显示为 html,我将接受这样做的风险 :)

我最好解码数据库中的文本吗?我不确定这是我将来想要使用的格式,但我对 HTML 实体的经验太少,所以我不确定最佳的长期路线。

这里欢迎任何从技术知识到睿智的老圣人的闲谈。

【问题讨论】:

  • 抱歉,您所说的 “我希望 HTML 在文档中显示为 html”是什么意思? 您是要按字面意思显示文本 <P><STRONG><FONT size=4> 还是执行你想渲染一个带有粗体文本、大小为 4 的段落吗?
  • 顺便说一句,HTML <font> 标记自 1998 年以来已被弃用。
  • 最初我想显示带有渲染标记的文档,当数据库包含表格的 HTML 时,我想渲染一个表格。现在我正在重新阅读我原来的问题,我想知道这是否是最好的方法。

标签: jsf-2 html-encode


【解决方案1】:

我怎样才能获得一个 JSF 文件来正确呈现它?将其作为转义文本输出给我第一行,非转义文本给我第二行。

StringEscapeUtils#unescapeHtml() 包装在EL 函数(example here) 中,并在<h:outputText>escape="false" 中显示它。

<h:outputText value="#{util:unescapeHtml(bean.value)}" escape="false" />

该函数会将&amp;lt; 转换为&lt; 等等,escape="false" 将阻止 JSF 重新转义它,以防止用户控制的输入被逐字解释,这可能会造成 XSS 漏洞。


我最好解码数据库中的文本吗?我不确定这是否是我将来想要使用的格式,但我对 HTML 实体的经验太少,所以我不确定最佳的长期路线。

完全不在数据库中存储 HTML 是最好的选择。如果真的没有其他选择,那么我会选择直接在数据库中解码它们。

【讨论】:

  • util:unescapeHtml 这个符号是什么?这是一个带有一个冒号的 Java 8 方法引用吗?
  • @jordanpg:点击“此处的示例”链接。
  • 所以它是值表达式中的自定义 Facelets (JSP?) 标记?这真的是自定义标签的预期用例吗? IOW,与仅使用托管 bean 相比,这样做有什么优势,例如。 utilBean.unescape(x)?
  • 这不是自定义标签。这是一个EL函数。无法在(有状态的!)托管 bean 上调用静态方法。
  • 在我看来像一个自定义标签:docs.oracle.com/javaee/7/tutorial/jsf-custom008.htm#BNAWN 我还顺便指出,我从未在官方文档中看到“EL 函数”:docs.oracle.com/javaee/7/tutorial/jsf-el.htm#GJDDD
猜你喜欢
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多