0

PHP 関数 header(); による content-type の設定に問題があります。私の完全なコードは出力を送信しません。応答オブジェクトのみがそれを行います。すべての出力の前に、ヘッダーを送信します。Accept-Header に応じて、Content-Type を設定し、適切な出力を行います。簡単な方法では次のようになります。

switch($aceptHeader){ 
  case 'text/html': 
  #and some othe stupid acept-headers of the ie
    $this->setHeader('Content-Type: text/html; charset=".."');
    $this->sendHeaders();
    $this->sendDefault();
    break;
  case 'application/json':
    $this->setHeader('Content-Type: application/json');
    $this->sendJSON();
    break;  
  case 'application/xml':
    $this->setHeader('Content-Type: application/xml');
    $this->sendXML();
    break;
}

setHeader のメソッドは配列のみを埋めます。これは foreach ループによって header() に入れられます。関数。$this->setHeader()これは重要ではありません。変更して直接試してみたheader('Content-Type..');ところ、同じ結果が得られました (後で)。出力は、twig テンプレートによる配列のレンダリングだけです。これが唯一の出力です。ヘッダーの設定は問題ではありません。を実行すると、肯定的な結果が得られますprint_r(header_list());。そこには、前に設定したヘッダーが正確に表示されます。ほとんどすべてのブラウザーで同じ応答ヘッダーが表示されますが、すべてではありません。これが、w3cバリデーター(およびその他のツール)でページをテストした理由です。すべてが同じ結果を示しました:

Content-Type ヘッダーを取得しません

私の間違いは何ですか?ヘッダーを設定する前に何か間違いがありますか? - id はワイルドなインクルードなどを行いません - ヘッダーの設定に問題はありません - リクエストとレスポンスの間でモデルで変更する唯一のヘッダーは http ステータスであり、その後$response-send();にほぼ毎回 in が続きます。

小枝テンプレートのレンダリング中にヘッダーが操作される可能性はありますか?

問題は、header() 関数による content-type ヘッダーの設定を妨げる可能性があるものは何ですか?

興味深いのは、次のコードを index.php の先頭に追加することです。

header('Content-Type: text/html');
echo 'test';
exit;

そして、すべての検証ツールでグリーンテストを取得します。ヘッダーが送信されました。

コード全体を調べて、ヘッダーを失った場所を調べることもできますが、これは長い道のりになる可能性があります。同じ問題を抱えている人、または私が間違ったことを想像できる人はいますか?

これは似たような例にすぎません。switch ブロックは問題ではなく、sendHeader も問題ではありません。原因は、ヘッダーを直接設定することで、午後全体でさまざまなケースでそれらを置き換えたからです-毎回同じ結果が得られました。

これらの出力スイッチをさまざまなケースに使用しましたが、毎回正常に動作します。jQuery の $.ajax() が文字列ではなく json として受け入れるヘッダーを付けて、json を送信します。RESTful api 用の xml を作成しました。これは正常に動作し、必要な形式でデータを送信します。バリデータ ツールと ie8 だけが気に入らない。そして、私はその理由を理解していません...

4

2 に答える 2

0
switch($aceptHeader){ 
  case 'text/html': 
  #and some othe stupid acept-headers of the ie
    $this->setHeader('Content-Type: text/html; charset=".."');
    $this->sendHeaders();
    $this->sendDefault();
    break;
  case 'application/json':
    $this->setHeader('Content-Type: application/json');
    $this->sendJSON();
    break;
  case 'application/xml':
    $this->setHeader('Content-Type: application/xml');
    $this->sendXML();
    break;
}

次のケースを試すタイミングをコードに伝えるブレークを忘れました。

于 2013-08-07T20:11:49.153 に答える