在php中更改mime类型的输出

时间:2008-09-30 06:52:11

标签: php xml mime-types

我有一个PHP脚本。大多数情况下,脚本返回html,它工作正常,但有一次(参数?Format = XML)脚本返回XML而不是HTML。

有没有办法可以动态地将php输出的mime类型从text / html更改为text / xml或application / xml?

6 个答案:

答案 0 :(得分:107)

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

有关header()

的PHP文档的更多信息

答案 1 :(得分:17)

设置Content-Type标题:

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

虽然您可能应该使用“application / xml”。

答案 2 :(得分:4)

您应该在发送任何输出之前发送Content-Type标题

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

答案 3 :(得分:3)

我将回答更新,因为之前的答案都很好 我已经读过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 +上进行测试

答案 4 :(得分:1)

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

您也可以在同一行中添加编码。我添加了utf-8,这是最常见的。

答案 5 :(得分:0)

我刚使用了以下内容:
注意:我正在使用&#34;我&#34;为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>";