我的 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 (即 string èeesu;
)。
è
是一个有效的 HTML 实体,但我知道 XML 只定义了一组最小的字符引用(&
、<
等),并且 XML 期望所有其他字符都在其文档编码表示中,因此会拒绝è
.
有人可以确认是这种情况吗?如果是这样,我怎样才能让 PHP 只编码特定于 XML 的实体而不是 HTML 实体?