【问题标题】:Force JSF to escape special characters in unicode强制 JSF 转义 unicode 中的特殊字符
【发布时间】:2013-09-06 22:18:45
【问题描述】:

是否可以强制 JSF 以 unicode 方式 ä 而不是命名实体方式 ä 转义特殊字符?

背景:一些旧的移动设备(例如 Android 2.3.4 的 HTC-Desire)拒绝显示包含命名实体的页面:

此页面包含以下错误...未定义实体“auml”。

页面具有 HTML5-Doctype,according to the specification aumlvalid predefined character-reference。 所以我认为这是一个浏览器错误,但这对我没有帮助。

我尝试用它们的 unicode 表示来替换特殊字符。但是,如果我在视图中放置 ä 甚至 ä,JSF 将为我呈现 ä。 如果我将实体映射放在 doctype 中(我知道这不应该在 HTML5-doctype 中完成),那么行为会变得非常奇怪:

<!DOCTYPE html [
    <!ENTITY auml "&#228;">
    <!ENTITY mdash "&#8212;">
    ...
]>

这将导致没有映射的正确 HTML5 文档类型。但是&amp;mdash; 将被&amp;#8212; 替换,而&amp;auml; 不会被替换。

有没有人对此进行解释,或者是否有可能将 JSF 配置为始终呈现 unicode 转义的实体?

【问题讨论】:

  • 什么 JSF impl/version?无法在默认修剪中使用 Mojarra 2.1.25 进行复制。然而,我记得在古代版本中这样的编码不一致。如果您将 &lt;f:view encoding&gt; 显式设置为不兼容 Unicode 的编码,也会发生这种情况,但这是一个太明显的原因。
  • Android 2.3.3 呈现 &amp;auml; 对我来说很好......你不是将它作为 XML MIME 类型来服务吗?尽管 HTML5 试图捏造这个问题,auml 和其他 HTML 实体没有在 XML 中预定义,应该被 XML 解析器拒绝。
  • 你是对的@BalusC。设置&lt;f:view encoding="ISO-8859-15"&gt; 将是一个太明显的原因。但显然不适合我。感谢您对我的暗示和羞辱。因此,尽管我的问题尚未解决,但问题已得到解答。
  • 感谢@bobince 重新测试。内容类型是带有字符集 ISO-8859-15 的 text/html,因此不应将文档视为 XML。还是我在这里遗漏了什么?
  • 啊...contentType 不一定默认为text/html,所以无论如何您都应该手动设置它。见this question。如果你问我,JSF 中的糟糕设计是灾难性的——如果你没有预料到,进入 XML 模式很容易破坏一半的 JavaScript,除了实体问题。

标签: html jsf unicode


【解决方案1】:

如果您将&lt;f:view encoding&gt; 设置为非Unicode 兼容编码,就会发生这种情况。

相应地修复它:

<f:view encoding="UTF-8">

由于 Facelets 上的 JSF2,这已经是默认值,顺便说一下,如果您确实在 Facelets 上使用 JSF2,您可以放心地忽略它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-28
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多