【发布时间】:2011-04-17 19:56:03
【问题描述】:
我在 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,这是一个问题。
【问题讨论】:
-
您问题的某些重要部分是不可见的,因为它们被解析为标记。请用反引号 (``) 将这些位括起来。
-
@LarsH:嗯,我在问题源中没有看到任何需要这个的东西。
-
@Tomalak:“1. 我可以找到并替换所有 ?? 并将它们替换为 ?? 或实际空间。”当然在我看来好像少了点什么。
-
@LarsH:哦,你是对的。我没有注意到这些。只有几个代表可以为您服务,您可以自己编辑问题。 :)
标签: php xml tinymce entity simplexml