измените тип вывода mime в php


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

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

Author: Sam, 2008-09-30

6 answers

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

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

 104
Author: nickf, 2013-06-16 12:38:46

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

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

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

 17
Author: John Millikin, 2008-09-30 06:54:13

Вы должны отправить заголовок Content-Type , прежде чем отправлять какие-либо выходные данные.

header('Content-Type: text/xml');
 4
Author: andy.gurin, 2014-04-17 09:17:34

Я отвечу на обновление, так как предыдущие ответы хороши.
Я читал, что 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-декларацию.
Вы должны указать, какая версия является проблемной.

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

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

 3
Author: PhiLho, 2008-09-30 09:26:23

Я только что использовал следующее:
ПРИМЕЧАНИЕ: Я использую "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>";
 0
Author: Thomas, 2017-07-12 09:34:45
header('Content-Type: application/xml; charset=utf-8');

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

 0
Author: Usman Ahmed, 2018-02-11 18:21:47