AcceptヘッダやUAを見てContent-Typeを振り分ける

  • ページ: BugTrack
  • 投稿者: justitia?
  • 優先順位: 低
  • 状態: 保留
  • カテゴリー: 本体新機能
  • 投稿日: 2004-11-26 (金) 13:59:27
  • バージョン: 1.4.x

メッセージ

Another HTML-LintにWikiから出力されたHTMLソースを放り込むと怒られてしまいます。 そこでpukiwiki.skin.phpを次のように書き換えてみます

header('Content-Type: application/xhtml+xml ; charset=' . CONTENT_CHARSET);

これならば怒られなくなるけれども、IEなど一部のブラウザでは表示されなくなります。そこで次のように書き換えます

$accept = $_SERVER['HTTP_ACCEPT'];
$ua = $_SERVER['HTTP_USER_AGENT'];
if (eregi("Opera", $UA)) {
  header ('Content-Type: application/xhtml+xml; charset=' . CONTENT_CHARSET);
} elseif (ereg("application/xhtml\+xml",$accept)) {
  header ('Content-Type: application/xhtml+xml; charset=' . CONTENT_CHARSET);
} else {
  header ('Content-Type: text/html; charset=' . CONTENT_CHARSET);
}

これなら、問題ない・・・はずです。 もしよければ使って下さい


  • Operaだけ明示的に分けているのは何故? -- 2004-11-26 (金) 15:53:08
    • おそらく、Opera は HTTP_ACCEPT に application/xhtml+xml を出さないからでは? -- みこ 2004-11-26 (金) 16:30:29
    • ただ、Operaも含めてUSER_AGENTによる例外は作るべきではないとおもいますけどね (^^; 受け入れられないといってるんだから・・・ -- みこ 2004-11-26 (金) 16:34:34
    • 余談ですが、another-lint も HTTP_ACCEPT に application/xhtml+xml が含まれていなかったような覚えが・・・ (^^;(記憶違いならごめんなさい (^^;) -- みこ 2004-11-26 (金) 17:17:16
  • お知らせありがとうございます :) Another HTML-Lint のその解説の最後に「しかし、そもそも application/xhtml+xml では、<meta http-equiv> を記述すべきではありません。」とも書いてありますね。そうなのであればスキンから <meta http-equiv> を取り除くことや、その影響についても考えて作業しないといけなそうです。怒られなくなるようにしよう、というよりも、正しいのはどうなのだろうか、という視点でもう少し掘り下げる必要がありそうですね。ご意見をお待ちしております -- henoheno 2004-11-27 (土) 22:41:37
  • けど実質今は<meta http-equiv>があるからこそIEでも何とか表示できているのであって、削除したらそれこそIE門前払いになりかねないと思います -- 2004-11-27 (土) 23:01:28
  • ああ、「正しい」というのは仕様に対する厳格さではなくて、(スマートで)現実的な解かどうかということでお願いします :) -- henoheno 2004-11-28 (日) 00:39:42
  • できるならば.htaccessで全部メタ情報を提供するのが一番と思います。<meta http-equiv>はあくまでもこの手段が使えない場合の代替措置だと、私は思います -- 2004-11-28 (日) 09:42:59
  • そうそう、Windows は application/xhtml+xml をわたすプロトコルや拡張子が未だにないんですよね (^^; -- みこ 2004-11-28 (日) 10:03:51
  • わたしの中での現実的な解は ブラウザがW3C標準モードになってさえくれれば、無理に application/xhtml+xml でなく text/html でもいいのでは?という感じです。(そうするとほぼ現状でいいのでは?ってことなんですけどね。) -- みこ 2004-11-28 (日) 10:08:17
  • ただ、HTTP(プロトコル) からみての本来は RFC2616(HTTP/1.1) ではリソースを最適にあらわせるのならば、再度サーバにリクエストしておこなう・・・ということになっています。そのための再リクエストやタイプの認識を補助するのがのが Accept になるので、Accept で application/xhtml+xml (とapplication/xml)があるならば、それを返してあげてもいいのではないかな*1と・・・ -- みこ 2004-11-28 (日) 10:38:25
  • ふむふむ。ブラウザが該当の Accept を返してくる (受け入れオッケーですよ) ときにそうする (Content-Typeをセットし、metaを取り外す) のが良さそうですね。 -- henoheno 2004-11-28 (日) 11:11:17
  • 旧PukiWiki.org の対応 -- merlin 2004-11-28 (日) 18:10:26
    header('Cache-control: no-cache');
    header('Pragma: no-cache');
    if (ereg("(Gecko|Opera\/7|Another_HTML-lint)",HTTP_USER_AGENT) == FALSE) 
    {
      header('Content-Type: text/html; charset='.mb_http_output());
    } else {
      header('Content-Type: application/xhtml+xml; charset='.mb_http_output());
    }
    if (ereg("MSIE (3|4|5|6)", HTTP_USER_AGENT) == FALSE) {
      echo '<?xml version="1.0" encoding="'.mb_http_output().'"?>'."\n";
    }
    ......
    <head>
    <?php if (ereg("(Gecko|Opera\/7|Another_HTML-lint)",HTTP_USER_AGENT) == FALSE) 
    { ?>
      <meta http-equiv="content-type" content="application/xhtml+xml; charset=<?php echo mb_http_output()?>" /> 
    <?php } ?>
    <?php if (ereg("(Another_HTML-lint)",HTTP_USER_AGENT) == FALSE) 
    { ?>
      <meta http-equiv="content-style-type" content="text/css" />
    <?php } ?>
    ......
    
  • こんな風にするのかな? -- merlin 2004-11-28 (日) 18:34:29
    http://fumika.jp/nikki/2004/04/mod_rewrite
    http://altba.com/bakera/hatomaru.aspx/ebi/topic/1234
    http://www.nurs.or.jp/~b3/test/mediatype/
  • 参考資料としては HTMLおよびXHTMLに関するFAQ (和訳) かな・・・このなかに、ちょっと興味深い記事も・・・ -- みこ 2004-11-30 (火) 14:46:33
  • IE6.0SP2WindowsのIE限定だけど、トリックを使ってXHTML1.1表示できちゃった・・・ (^^; -- みこ 2004-11-30 (火) 20:46:51
  • merlinさん、みこさん資料をありがとうございます。この対処は実務的にどうこうというよりも、丁寧であるかどうかという問題のようですね。 -- henoheno 2004-11-30 (火) 21:46:35
  • そそ。なおかつまだ問題も多いし、PukiWikiはスキンだけで対応できるので「ちょっと便利に」ぐらいの程度かと。。。 -- みこ 2004-12-01 (水) 10:58:29
  • 関連: BugTrack2/16 -- 2005-02-24 (木) 23:14:41

*1 いいのではないかなという意味は、なくてもいいのではの裏返し (^^;

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-04-21 (木) 18:24:39
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.597 sec.

OSDN