我的RESTful WCF服務接受來自客戶端的XML請求體,大多數客戶端是PHP應用程序。WCF/PHP - XML解析器無法處理HTML實體?
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(即,字符串èeesu;
)。
è
是一個有效的HTML實體,但我明白,XML只定義一組最小字符引用的( &
,<
等),以及XML希望所有其他字符,在他們的文檔編碼表示代替,因此會拒絕像è
事情。
有人可以確認是這種情況嗎?如果是這樣,我怎麼能讓PHP只編碼XML特定的實體而不是HTML實體?
ENT_XML1不是一個有效的常量 – Michelangelo
@Michelangelo是的它是:http://php.net/manual/en/function.htmlspecialchars.php「ENT_XML1 - 處理代碼爲XML 1」。 – Dai
這個選項僅適用於特定版本的php – Michelangelo