我的浏览器告诉我:
error on line 2 at column 308899: Entity 'ntilde' not defined
并且特定行在我的 XML 中为:
<LastName>Treviño</LastName>
这个名字最初是Treviño
的,但它是通过PHP的htmlentities
函数修改的。
我该怎么做才能让 php 和 xml 玩得好?
在 Mac 上使用 Chrome 19。
显然,同时使用htmlspecialchars
和htmlentities
可以解决问题。
htmlspecialchars(htmlentities($value));
你实际上是在生成XML还是HTML?它们不是一回事。HTML定义了一堆实体(IIRC),而XML很少有"内置"的 - 只有像&
和<
这样的几个。
当您可以直接使用文本时,为什么两者都使用实体?只需确保您使用的编码一致(UTF-8 将是一个不错的选择)。
不需要在 XML 中对波浪号字符进行编码。它会抛出错误。在这种情况下,最好的办法可能是将文本换行在 CDATA 中。
<LastName><![CDATA[Treviño]]></LastName>
尝试为 htmlentities 指定编码
htmlentities($string,ENT_QUOTES,'UTF-8');
应该是:特雷维诺。您的 DTD 文件中可能缺少实体?像这样:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Customer
[
<!ENTITY ntilde "ñ">
]>
<Customer>
<LastName>Treviño</LastName>
</Customer>