【PHP】headerでContent-Typeを指定したのに効かない場合の対処法

公開日: : PHP, RSS, サイト制作

スポンサーリンク

PHPでサイトマップを作ろうと思い、XML形式のファイルを出力しようとしてheaderを指定したのにXMLっぽく表示されず、ただただ文字列が表示されるという現象が起きてしまいました。

xmllikeimg
↑こんなXMLライクな表示にしたい(画像はYahooのRSS)

一応なんとか表示できるようになったのでその対処法です。

Content-Typeの指定

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

通常はPHPでこの記述を加えればXMLファイルとして認識してくれるはずです

Chrome開発者用ツールでヘッダを確認

原因が何か探るためにChromeの開発者用ツールで確認しました。
下記画像はYahooのRSSページを解析したものですが、きちんと「application/xml」の記述があります。この状態であれば問題ありません。ここが別の値になっている場合うまくXMLファイルであることが伝わっていないということになります。

私の作ったファイルは「html/text」の表記になってしまっており、XMLと解釈されていないということが判明しました。

xmlcheck-network
↑ウェブページ上で右クリック→「検証」でこの画面が開きます。
上のタブの「Network」を選択し、該当するXMLファイル(rss.xml)を左サイドの中から選択すると「Headers」にヘッダの情報が記載されているので確認してください。

ファイルの形式の確認

ファイルのエンコードが「UTF-8」になっているかどうか確認します。サクラエディタで該当ファイルを開いてみます。「名前を付けて保存」を選択すると次のような画面が出てきます。

encodingtype

BOMにチェックが入っています。UTF-8の先頭にBOMがつくと余計に3バイト分のデータが加算されてしまい、ブラウザ側でうまく読み取れなくなってしまうとか何とか。。

ということでこの「BOM」のチェックを外して上書き保存して確認してみるとちゃんとXMLと認識されました。

スポンサーリンク
Amazon

  • このエントリーをはてなブックマークに追加

関連記事

リクルート期間限定ポイントの有効な使い道

はじめに  先日クレジットカードの見直し活動の一環でポイント還元率の

初心者がお金を貯めるための節約・財テク手法まとめ【ポイント還元・投資・税金対策】

はじめに  最近なるべく節約しようと思い、お金周りに関して色々調べて

動画講座を効率的にキャプチャして復習する方法

はじめに  最近、動画媒体の講座などをたまに視聴しています。独学だと

Twitterのオリジナルサイズの画像ファイル(.jpg-large,.jpg-orig等)を一括リネームする

Twitterの画像をオリジナルサイズで保存しようとするとjpg-la

【Unity】他のスクリプトを一括で取得して有効化・無効化を制御する

Unityを使っていて他のスクリプトを一時的に停止させたいと思ったので

テレビの録画をPCやNASで共有する

今までテレビはテレビ用のモニターで見ればいいやと思っていたのですが、さ

【DeepLearning】物体検出手法のSSD(Keras版)を試す (Ubuntu14.04)

はやりのディープラーニングの物体検出手法の一つであるSSDのサンプルを

→もっと見る

  • Author : ががんぼ
    プログラミングやWeb関係で気付いたことについてメモしていく予定。だいたいが備忘録ですが、自分でサンプルを作って動かしてみたりしています。
PAGE TOP ↑