【发布时间】:2012-06-26 22:39:31
【问题描述】:
我的 RESTful WCF 服务接受来自客户端的 XML 请求正文,大多数客户端是 PHP 应用程序。
PHP 应用程序使用放置在元素标签中的 htmlentities() 对其请求进行编码。例如,添加新用户帐户的请求可能如下所示:
$body = "<user>
<userName>" . htmlentities( $userName ) . "</userName>
</user>"
系统运行良好,直到今天为止,它的错误为零。
我查看了日志,发现这个请求失败了:
<user>
<userName>èeesu</userName>
</user>
以下情况除外:
InvalidOperationException:“XML 文档 (4, 12) 中存在错误。” XmlException:“字符引用无效。第 4 行,位置 12。”
(其中第 4 行,位置 12,指的是 <userName> 元素的 InnerText(即字符串 &egrave;eesu;)。
&egrave; 是一个有效的 HTML 实体,但我知道 XML 只定义了一组最少的字符引用(&amp;、&lt; 等),并且 XML 期望所有其他字符都在其文档编码中而是表示,因此会拒绝 &egrave; 之类的内容。
有人可以确认是这种情况吗?如果是这样,我怎样才能让 PHP 只编码特定于 XML 的实体而不是 HTML 实体?
【问题讨论】: