XML 分析器错误:未定义实体
我已经搜索了这个问题的stackoverflow,并确实找到了一些主题,但我觉得在这个问题上没有一个可靠的答案。
我有一个用户提交的表单,字段的值存储在 XML 文件中。XML 设置为使用 UTF-8 进行编码。
用户时不时地会从某个地方复制/粘贴文本,这就是我得到“实体未定义错误”的时候。
我意识到XML只支持少数几个实体,除此之外的任何东西都是无法识别的 - 因此解析器错误。
根据我收集到的信息,我看到了几个选项:
- 我可以找到并替换所有空间,并将它们与实际空间交换。
 
- 我可以将有问题的代码放在 CDATA 部分中。
- 我可以在 XML 文件中包含这些实体。
我对XML文件所做的是,用户可以将内容输入到表单中,它存储在XML文件中,然后该内容在网页上显示为XHTML(使用SimpleXML解析)。
在这三个选项中,或者我不知道的任何其他选项中,处理这些实体的最佳方式是什么?
谢谢,瑞安
更新
我要感谢大家的大力反馈。我实际上确定了导致我的实体错误的原因。所有的建议都让我更深入地研究了它!
一些文本框是普通的旧文本框,但我的文本区域使用TinyMCE进行了增强。事实证明,在仔细观察时,PHP警告总是引用TinyMCE增强文本区域的数据。后来我在PC上注意到所有字符都被取出(因为它无法读取它们),但是在MAC上,您可以看到引用该字符的unicode编号的小方框。它首先出现在MAC上的正方形的原因是因为我使用utf8_encode来编码不在UTF中的数据,以防止其他解析错误(这也与TinyMCE有关)。
所有这一切的解决方案非常简单:
我在我的tinyMCE.init中添加了这行。现在,所有角色都以他们应该的方式出现。entity_encoding : "utf-8"
我想我唯一不明白的是为什么字符在放入文本框时仍然显示,因为没有任何东西将它们转换为UTF,但是对于TinyMCE来说,这是一个问题。