我正在将 Agavi 与 Doctrine 一起使用。主模板有时无法加载,并AgaviParseException
列出所有
. 我正在使用所有技术的最新稳定版本。
3 回答
用于 
非破坏空间。您可能需要XHTML
在您的模板中有效。请参阅此图表以供参考。
虽然我对您使用的工具不太熟悉,但在我看来,
找不到 XML 实体。您可以包含 XML 实体,也可以使用它 
。原因是:只有五个预定义的 XML 实体,所有其他的都需要在执行 XML 或 XHTML 时包括(而浏览器通常更宽松)。
它们是 XHTML 以下内容的一部分:
PUBLIC
"-//W3C//ENTITIES Latin 1 for XHTML//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent"
并在 XML 解析器解析时标记以下关于 XHTML 的引用:
如果文档由不读取或无法读取外部实体的 XML 解析器读取,则只有五个内置 XML 字符实体(见上文)可以安全地使用,但如果在内部声明了其他实体,则可以使用它们DTD 子集。
但是,如果上面的错字是故意的,也可能意味着您错过;
了 
.
我不知道确切的问题是什么(在提出此类问题时,请始终发布异常消息和其他有用的信息),但实际上只有一种方法可以解决此问题。
不是主模板加载失败,而是表单处理系统无法在更快、更简单的 XML 中解析完整生成的输出(因此它可以为您重新填写表单,或插入验证中的错误消息)解析模式。在 XML 解析模式(通常用于 XHTML)中,默认情况下它不会针对 DTD 进行验证,因此它只知道标准 XML 实体(&
、"
、'
和<
>
)。HTML解析模式没有这个问题。您可以强制 Agavi 使用它,但它会自动检测 HTML 或 XHTML 的使用并选择正确的模式,所以这可能不是一个好主意,特别是因为 libxml 的 HTML 解析有时可能有点不稳定(使用了 libxml通过 PHP 的 DOM 实现;解析和处理表单中的大多数限制或错误都应归功于 libxml - 如果您想了解处理不同版本 libxml 的解决方法,请查看 AgaviFormPopulationFilter.class.php以及它们的行为,例如在保存时插入双 XML 序言、破坏 CDATA 部分或其他奇怪的东西)。
无论如何,我假设您在文档中使用 UTF-8,因此实际上不需要对“©”或“«”之类的字符使用任何实体 - 您可以按字面意思插入它们而不是使用©
等等。当然唯一的例外是不间断空格,在编辑器中很难看到和区分,但正如其他评论中指出的那样,您可以在 
此处使用数字等价物。