web-dev-qa-db-ja.com

PHPの出力のMIMEタイプを変更します

私はPHPスクリプトを持っています。ほとんどの場合、スクリプトはhtmlを返しますが、これは正常に機能していますが、ある場合(パラメーター?Format = XML)、スクリプトはHTMLではなくXMLを返します。

返されたPHP出力のMIMEタイプをその場でtext/htmlからtext/xmlまたはapplication/xmlに変更する方法はありますか?

51
Sam
_header('Content-type: application/xml');
_

詳細な情報は、PHPのドキュメント header()

108
nickf

をセットする Content-Typeヘッダー:

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

ただし、代わりに「application/xml」を使用する必要があります。

17
John Millikin

Content-Typeヘッダーを送信する必要がありますbefore出力を送信します。

header('Content-Type: text/xml');
4
andy.gurin

以前の回答は良いので、更新に回答します。
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はエラーを表示します。WinXPPro SP2 +でテスト済み

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

同じ行にエンコードを追加することもできます。最も一般的なutf-8を追加しました。

1
Usman Ahmed

私は次のものを使用しました:
注:SQLの拡張機能拡張に「i」を使用しています。

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
Thomas