我有一个PHP脚本。大多数情况下,脚本返回html,它工作正常,但有一次(参数?Format = XML)脚本返回XML而不是HTML。
有没有办法可以动态地将php输出的mime类型从text / html更改为text / xml或application / xml?
答案 0 :(得分:107)
header('Content-type: application/xml');
有关header()
答案 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>";