13

我的 JSF XHTML 页面上经常有 Javascript,其中包含 &&,我最终不得不将其编码为&&

例如,当我将以下内容放在我的 JSF XHTML 页面文件中时:

I am an & sign

我得到错误:

The entity name must immediately follow the '&' in the entity reference

解决此问题的一种方法似乎是将&我认为不希望只写 '&' 的 '&' 更改为。

看来,对于我在 Javascript 中使用“&”的情况,我可以将 Javascript 包装在 CDATA 标记中;当包装在 CDATA 标记中时,我可以编写 '&' 而不必将其转义为&,这是一个很好的解决方法,可以在我的页面上拥有更多可读的 Javascript 代码。

但是,当我想在页面上的其他地方使用文字“&”时会发生什么,而它不在<script>标签内,因此不能轻易地将代码包装在 CDATA 标签中?对于这些情况,我必须总是逃避'&'吗?&amp;

注意尝试使用 ' 转义值的能力,但似乎无法解决问题

4

4 回答 4

15

Facelets 是一种基于 XML 的视图技术。任何由 XML 解析器进行特殊处理的字符都需要进行 XML 转义,以便按字面意思呈现它们。这包括除其他外<&. <指示 XML 标记的开始,如 此类,<foo>指示&XML 实体的开始,如&#38;<必须转义as和as &lt;&&amp;

不在 Facelets 中转义它们会导致以下异常<

javax.faces.view.facelets.FaceletException: Error Parsing /test.xhtml: Error Traced[line: 42] 元素的内容必须由格式良好的字符数据或标记组成。

以下是&

javax.faces.view.facelets.FaceletException: Error Parsing /test.xhtml: Error Traced[line: 42] 实体名称必须紧跟实体引用中的“&”。

这与 JavaScript 无关,它适用于整个视图,包括“纯文本”。这些字符恰好也是 JavaScript 运算符。没有办法解决这个问题,这就是 XML 的指定方式。然而,在 JavaScript 中,还有另一种方法可以避免转义或使用 CDATA 块:只需将该 JS 代码放在您通过或.js加载的自己的文件中。<script><h:outputScript>

在 EL 中,还有一个&&操作符也需要转义&amp;&amp;,但幸运的是这个操作符有一个别名,即and操作符。

也可以看看:

于 2012-06-18T19:52:51.497 回答
1

这是因为 & 是 XML 中的特殊字符:http ://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references

于 2012-06-18T16:22:27.027 回答
1

仅供参考,我试图在我的 JSF 页面中写 (c) 字符。当我写 © 时出现错误:“copy is referenced but not declared” 当我写 © 我得到了原始字符串。

我可以使用 unicode 表示法显示特殊字符:©

于 2014-02-23T22:09:16.430 回答
-2

这段代码对我有用:

<h:outputText value="&amp;copy;" escape="false" />
于 2016-06-06T09:18:14.427 回答