PHP -> вывод XML отличается от IE - PullRequest
1 голос
/ 29 июля 2010

Я пытался вывести XML с помощью PHP, но обнаружил странную (!) Ошибку в Internet Explorer.

Ожидаемый вывод XML: (упрощенно)

<root>
<match_id>12</match_id>
<stadium_id>43</stadium_id>
<tribune_id>2</tribune_id>
<fan_id>453</fan_id>
</root>

Я создаю этот вывод со следующим кодом PHP:

echo "<?xml version='1.0' encoding='utf-8' ?>
<root>
<match_id>"; echo $match->getId(); echo "</match_id>
<stadium_id>43</stadium_id>
<tribune_id>2</tribune_id>
<fan_id>".$_SESSION['user_id']."</fan_id>
</root>";

В Firefox выводтакой же, как и ожидалось.Однако в IE вывод выглядит так:

<?xml version="1.0" encoding="utf-8" ?> 
<root>
  <match_id>0</match_id> 
  <stadium_id>43</stadium_id> 
  <tribune_id>2</tribune_id> 
  <fan_id /> 
</root>

Это действительно досадная ошибка.Я установил заголовок PHP для вывода XML и изменил много других вещей, но не смог заставить его работать.

Часть $match->getId() просто возвращает целое число, но IE всегда показывает это значение как 0. Если яустановите <fan_id> и <match_id> вручную, IE покажет значения правильно.

Кстати, я использую этот вывод XML во Flash (AS3), и это также показывает тот же результат с IE.

Что я делаю не так?

Ответы [ 3 ]

1 голос
/ 29 июля 2010

Похоже, это связано с разницей между сеансами - в сеансе IE не хранится идентификатор пользователя. Точно так же, $match->getId() на самом деле 0 - я думаю, что вы получите аналогичный результат, используя Chrome, Safari или веб-браузер на любом другом компьютере.

Еще одна вещь: Flash может не отправлять cookie-файл сеанса PHP на сервер по запросу - что соответствует поведению IE / нет действительного сеанса.

1 голос
/ 29 июля 2010

Попробуйте:

  header( "content-type: application/xml; charset=ISO-8859-15" );   

OR

$doc = new DOMDocument;

$root = $doc->createElement('root');  
$doc->appendChild($root);

$match_id = $doc->createElement('match_id', $match->getId());
$root->appendChild($match_id);

$stadium_id = $doc->createElement('stadium_id', '43');
$root->appendChild($stadium_id);

$tribune_id = $doc->createElement('tribune_id', '2');
$root->appendChild($tribune_id, '2');

$fan_id = $doc->createElement('fan_id', $_SESSION['user_id']);
$root->appendChild($fan_id);

echo $doc->saveXML();

//$doc->save('file.xml'); // if you want to write to file 
0 голосов
/ 29 июля 2010

Какой браузер используется, не влияет на работу вашего PHP (потому что он выполняется на сервере, а не в браузере).Обратите внимание, что во втором примере ваш fan_id также пуст, что указывает на что-то не так с вашей настройкой сеанса.Исследуйте это.

Сказав все это: вы рассматривали возможность использования simplexml () для вывода XML из PHP?Гораздо веселее использовать, чем повторять теги.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...