未在 Chrome 中定义的 XML 实体


XML Entity not defined in Chrome

我的浏览器告诉我:

error on line 2 at column 308899: Entity 'ntilde' not defined

并且特定行在我的 XML 中为:

<LastName>Trevi&ntilde;o</LastName>

这个名字最初是Treviño的,但它是通过PHP的htmlentities函数修改的。

我该怎么做才能让 php 和 xml 玩得好?


在 Mac 上使用 Chrome 19。

显然,同时使用htmlspecialcharshtmlentities可以解决问题。

htmlspecialchars(htmlentities($value));

你实际上是在生成XML还是HTML?它们不是一回事。HTML定义了一堆实体(IIRC),而XML很少有"内置"的 - 只有像&amp;&lt;这样的几个。

当您可以直接使用文本时,为什么两者都使用实体?只需确保您使用的编码一致(UTF-8 将是一个不错的选择)。

不需要在 XML 中对波浪号字符进行编码。它会抛出错误。在这种情况下,最好的办法可能是将文本换行在 CDATA 中。

<LastName><![CDATA[Trevi&ntilde;o]]></LastName>

尝试为 htmlentities 指定编码

htmlentities($string,ENT_QUOTES,'UTF-8');

应该是:特雷维诺。您的 DTD 文件中可能缺少实体?像这样:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Customer
[
<!ENTITY ntilde "&#241;">
]>
<Customer>
<LastName>Trevi&ntilde;o</LastName>
</Customer>