У меня проблема с чтением XML в php, отправляемом из базы данных доступа, когда тело содержит &. Когда, когда я получаю контент, содержащий & в теле, кажется, что & преобразуется в ["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 - это простой эхо-запрос для тестирования:
<?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, в этом случае я получил пустую строку.
Я протестировал отправку того же xml с CURL в php и отлично работает, используя тип содержимого text / xml и даже text / html.
Кто-нибудь знает, в чем может быть проблема?