измените тип вывода mime в php
У меня есть php-скрипт. Большую часть времени скрипт возвращает html, который работает нормально, но в одном случае (параметр?Формат=XML) скрипт возвращает XML вместо HTML.
Есть ли какой-либо способ изменить возвращаемый тип mime вывода php на лету с текста/html на текст/xml или приложение/xml?
6 answers
header('Content-type: application/xml');
Более подробная информация доступна в документации PHP для header()
Установите заголовок Content-Type
:
header('Content-Type: text/xml');
Хотя вам, вероятно, следует вместо этого использовать "приложение/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-декларацию.
Вы должны указать, какая версия является проблемной.
На самом деле, как я писал выше, с Т. е. (по крайней мере, 6), вам даже не нужен тип контента, он распознает XML-данные и отображает их в виде дерева. Ваш XML правильный?
[Обновление] Пробовал и с IE7, добавляя?формат=xml тоже, все еще отображающий XML правильно. Если я отправлю неверно сформированный XML, IE отобразит ошибку. Протестировано на WinXP Pro SP2+
Я только что использовал следующее:
ПРИМЕЧАНИЕ: Я использую "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>";
header('Content-Type: application/xml; charset=utf-8');
Вы также можете добавить кодировку в той же строке. Я добавил utf-8, который является наиболее распространенным.