Вопрос

У меня есть PHP-скрипт.Большую часть времени сценарий возвращает HTML, который работает нормально, но в одном случае (параметр ?Format=XML) сценарий возвращает XML вместо HTML.

Есть ли способ изменить возвращаемый тип mime вывода php на лету с text/html на text/xml или application/xml?

Это было полезно?

Решение

header('Content-type: application/xml');

Более подробную информацию можно найти в документации PHP для header()

Другие советы

Установить Content-Type заголовок:

header('Content-Type: text/xml');

Хотя вместо этого вам, вероятно, следует использовать «application/xml».

Вам следует отправить Content-Type заголовок до вы отправляете любой вывод.

header('Content-Type: text/xml');

Отвечу на обновление, так как предыдущие ответы хорошие.
Я читал, что Internet Explorer хорошо известен тем, что игнорирует заголовки типов Mime (большую часть времени?), полагаясь на содержимое файла (что в некоторых случаях может вызвать проблемы).

Ммм, я провел простой тест:

<?php
header('Content-Type: text/xml');
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root><foo a="b">Tada</foo></root>';
?>

Internet Explorer 6 отображает его правильно в формате XML.Даже если я удалю объявление XML.
Вы должны указать, какая версия проблематична.

На самом деле, как я писал выше, с IE (по крайней мере 6) вам даже не нужен тип контента, он распознает XML-данные и отображает их в виде дерева.Ваш XML правильный?

[Обновление] Пробовал также использовать IE7, добавив ?format=xml, XML по-прежнему отображается правильно.Если я отправлю неверный XML-код, IE отобразит ошибку.Протестировано на WinXP Pro SP2+.

header('Content-Type: application/xml; charset=utf-8');

Вы также можете добавить кодировку в той же строке.Я добавил utf-8, который встречается чаще всего.

Я просто использовал следующее:
ПРИМЕЧАНИЕ:Я использую «i» для улучшенного расширения sql.

Start XML file, echo parent node
header("Content-type: text/xml");
echo "<?xml version='1.0' encoding='UTF-8'?>";
echo "<marker>";

Перебирать строки, печатая узлы XML для каждой.

while ($row = @mysqli_fetch_assoc($results)){
  // Add to XML document node
  echo '<marker ';
  echo 'id="' . $ind . '" ';
  echo 'name="' . parseToXML($row['name']) . '" ';
  echo 'address="' . parseToXML($row['address']) . '" ';
  echo 'lat="' . $row['lat'] . '" ';
  echo 'lng="' . $row['lng'] . '" ';
  echo 'type="' . $row['type'] . '" ';
  echo '/>';
}

// End XML file
echo "</marker>";
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top