изменить тип пантомимы в php - PullRequest
       14

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

50 голосов
/ 30 сентября 2008

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

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

Ответы [ 6 ]

107 голосов
/ 30 сентября 2008
header('Content-type: application/xml');

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

17 голосов
/ 30 сентября 2008

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

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

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

4 голосов
/ 30 сентября 2008

Вы должны отправить Content-Type заголовок до того, как отправит какой-либо вывод.

header('Content-Type: text/xml');
3 голосов
/ 30 сентября 2008

Я отвечу на обновление, так как предыдущие ответы хороши.
Я читал, что 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 +

1 голос
/ 11 февраля 2018
header('Content-Type: application/xml; charset=utf-8');

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

0 голосов
/ 12 июля 2017

Я просто использовал следующее:
ПРИМЕЧАНИЕ: я использую «я» для улучшения 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>";
...