【发布时间】:2019-04-05 06:09:18
【问题描述】:
当正文包含 & 时,我在读取从 access 数据库发送的 php 中的 XML 时遇到问题。当我收到正文中包含 & 的内容时,似乎 & 在进程中的某处转换为 ["amp; 并且整个 xml 格式错误。这是我发送和接收的示例:
xml = "<?xml version='1.0' encoding='utf-8'?><query><author>John Steinbeck</author></query>"
Dim objHTTP As New ServerXMLHTTP60
objHTTP.Open "POST", "http://localhost/sandpit/testxml.php", False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objHTTP.send "request=" & xml
php文件只是一个简单的echo请求,用于测试:
<?php echo "<xmp>posted: ";var_dump($_REQUEST);echo "</xmp>"; ?>
当作者正文不包含 & 时,PHP 中的结果是:
["request"]=>
string(84) "<?xml version='1.0' encoding='utf-8'?><query><author>John
Steinbeck</author></query>"
}
但是,如果我将 xml 字符串更改为:
xml = "<?xml version='1.0' encoding='utf-8'?><query><author>John & Steinbeck</author></query>"
我得到的结果是:
posted: array(2) {
["request"]=>
string(41) "<?xml version='1.0'?><query><author>John "
["amp;_Steinbeck</author></query>"]=>
string(0) ""
}
你可以在上面看到 & 被转换为 ['amp....
还尝试使用 CDATA,结果如下:
posted: array(2) {
["request"]=>
string(68) "<?xml version='1.0' encoding='utf-8'?><query><author><!
[CDATA[ John "
["Steinbeck]]></author></query>"]=>
string(0) ""
}
似乎在 xml 字符串末尾的 & 号之后的所有内容都包含在 ["..."] 中,这会弄乱 xml。
还尝试将内容类型更改为 text/xml 和 application/xml 在这种情况下我得到一个空字符串。
我已经测试了在 php 中使用 CURL 发送相同的 xml,并且使用内容类型 text/xml 甚至 text/html 都可以正常工作。
有人知道问题出在哪里吗?
【问题讨论】:
-
CDATA,没用?这似乎很奇怪。你用什么解析 XML?我过去使用XMLReader 取得了巨大成功。对于 DOM 或 SimpleXml 之类的东西,我从来没有运气好过。我唯一遇到 & 的真正问题是在 Quickbooks 使用 XML 时,但那是很久以前的事了,也许是 8 年前。我希望他们现在能解决这个问题。
-
@Nick 是的,我看过那篇文章并尝试过,但是任何带有 & 符号的东西都会受到影响
-
@ArtisticPhoenix 我正在使用 simplexml,但问题是 XML 在到达时格式不正确,所以 simplexml 只是将其视为无效。
-
@ErikvonAsmuth 我撤回了我的近距离投票。
标签: php xml ms-access vba ampersand