【发布时间】:2013-09-06 22:18:45
【问题描述】:
是否可以强制 JSF 以 unicode 方式 ä 而不是命名实体方式 ä 转义特殊字符?
背景:一些旧的移动设备(例如 Android 2.3.4 的 HTC-Desire)拒绝显示包含命名实体的页面:
此页面包含以下错误...未定义实体“auml”。
页面具有 HTML5-Doctype,according to the specification auml 是 valid predefined character-reference。
所以我认为这是一个浏览器错误,但这对我没有帮助。
我尝试用它们的 unicode 表示来替换特殊字符。但是,如果我在视图中放置 ä 甚至 ä,JSF 将为我呈现 ä。
如果我将实体映射放在 doctype 中(我知道这不应该在 HTML5-doctype 中完成),那么行为会变得非常奇怪:
<!DOCTYPE html [
<!ENTITY auml "ä">
<!ENTITY mdash "—">
...
]>
这将导致没有映射的正确 HTML5 文档类型。但是&mdash; 将被&#8212; 替换,而&auml; 不会被替换。
有没有人对此进行解释,或者是否有可能将 JSF 配置为始终呈现 unicode 转义的实体?
【问题讨论】:
-
什么 JSF impl/version?无法在默认修剪中使用 Mojarra 2.1.25 进行复制。然而,我记得在古代版本中这样的编码不一致。如果您将
<f:view encoding>显式设置为不兼容 Unicode 的编码,也会发生这种情况,但这是一个太明显的原因。 -
Android 2.3.3 呈现
&auml;对我来说很好......你不是将它作为 XML MIME 类型来服务吗?尽管 HTML5 试图捏造这个问题,auml和其他 HTML 实体没有在 XML 中预定义,应该被 XML 解析器拒绝。 -
你是对的@BalusC。设置
<f:view encoding="ISO-8859-15">将是一个太明显的原因。但显然不适合我。感谢您对我的暗示和羞辱。因此,尽管我的问题尚未解决,但问题已得到解答。 -
感谢@bobince 重新测试。内容类型是带有字符集 ISO-8859-15 的 text/html,因此不应将文档视为 XML。还是我在这里遗漏了什么?
-
啊...
contentType不一定默认为text/html,所以无论如何您都应该手动设置它。见this question。如果你问我,JSF 中的糟糕设计是灾难性的——如果你没有预料到,进入 XML 模式很容易破坏一半的 JavaScript,除了实体问题。