asp.Net判断ブラウザバージョンコード

5308 ワード

string   UserBrowser=Request.Browser.Browser;//ブラウザ名
string   BrowserVersion=Request.Browser.Version;//ブラウザバージョン
以下MSDN HttpBrowserCapabilities bc=Requestから抜粋する.Browser;   Response.Write( "

Browser   Capabilities:

");   Response.Write( "Type   =   "  +   bc.Type   +   "
");   Response.Write( "Name   =   "  +   bc.Browser   +   "
");   Response.Write( "Version   =   "  +   bc.Version   +   "
");   Response.Write( "Major   Version   =   "  +   bc.MajorVersion   +   "
");   Response.Write( "Minor   Version   =   "  +   bc.MinorVersion   +   "
");   Response.Write( "Platform   =   "  +   bc.Platform   +   "
");   Response.Write( "Is   Beta   =   "  +   bc.Beta   +   "
");   Response.Write( "Is   Crawler   =   "  +   bc.Crawler   +   "
");   Response.Write( "Is   AOL   =   "  +   bc.AOL   +   "
");   Response.Write( "Is   Win16   =   "  +   bc.Win16   +   "
");   Response.Write( "Is   Win32   =   "  +   bc.Win32   +   "
");   Response.Write( "Supports   Frames   =   "  +   bc.Frames   +   "
");   Response.Write( "Supports   Tables   =   "  +   bc.Tables   +   "
");   Response.Write( "Supports   Cookies   =   "  +   bc.Cookies   +   "
");   Response.Write( "Supports   VB   Script   =   "  +   bc.VBScript   +   "
");   Response.Write( "Supports   JavaScript   =   "  +   bc.JavaScript   +   "
");   Response.Write( "Supports   Java   Applets   =   "  +   bc.JavaApplets   +   "
");   Response.Write( "Supports   ActiveX   Controls   =   "  +   bc.ActiveXControls   +   "
");   Response.Write( "CDF   =   "  +   bc.CDF   +   "
");
 
ダウンロードファイル名でUTF-8エンコーディングを使用する方法
著作権声明:任意に転載できますが、転載時には原作者charlee、オリジナルリンクhttp://tech.idv2.com/2009/03/05/use-utf8-in-download-filename/、および本声明を明記する必要があります.
Content-Typeをアプリケーション/octet-streamに設定することで、動的に生成されたコンテンツをファイルとしてダウンロードすることができ、これは誰もができると信じています.ではContent-Dispositionでダウンロードしたファイル名を設定するのも、ご存知の方も多いのではないでしょうか.基本的に、ダウンロードプログラムはこのように書かれています.
<?php
$filename = "document.txt";
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $filename);

print "Hello!";
?>

これによりブラウザで開くdocumentをダウンロードできる.doc.
ただし、$filenameがUTF-8でエンコードされている場合、一部のブラウザでは正常に処理できない場合があります.例えば、上記のプログラムを少し変更します.
<?php
$filename = " .txt";
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $filename);

print "Hello!";
?>

プログラムをUTF-8コードに保存して再アクセスすると、IE 6からダウンロードしたファイル名が文字化けしてしまいます.FF 3でダウンロードしたファイル名は「中国語」のみ.Opera 9ですべて正常です.
出力ヘッダは実際には次のようになります.
Content-Disposition: attachment; filename=      .txt

実はRFC2231の定義に従って、多言語符号化のContent-Dispositionはこのように定義すべきである.
Content-Disposition: attachment; filename*="utf8''%E4%B8%AD%E6%96%87%20%E6%96%87%E4%BB%B6%E5%90%8D.txt"

次のようになります.
  • filenameの後ろの等号の前に*
  • を追加します
  • filenameの値は、文字セット(utf 8)、言語(空)、urlencodeのファイル名の3つのセグメントに単一引用符で区切られます.
  • 二重引用符を付けたほうがいいです.そうしないと、ファイル名のスペースの後ろの部分がFirefoxに表示されません.
  • urlencodeの結果はphpのurlencode関数の結果とは異なり、phpのurlencodeはスペースを+に置き換えますが、ここでは%20
  • に置き換える必要があります.
    実験の結果、いくつかの主流ブラウザのサポート状況は以下の通りであることが分かった.
    IE6
    attachment; filename=""
    FF3
    attachment; filename="UTF-8ファイル名"
    attachment; filename*="utf 8''"
    O9
    attachment; filename="UTF-8ファイル名"
    Safari3(Win)
    サポートされていないようですか?上記の方法はすべてだめです
    このように、すべての主流ブラウザをサポートするには、プログラムがこのように書かなければなりません.
    <?php

    $ua = $_SERVER["HTTP_USER_AGENT"];

    $filename = " .txt";
    $encoded_filename = urlencode($filename);
    $encoded_filename = str_replace("+", "%20", $encoded_filename);

    header('Content-Type: application/octet-stream');

    if (preg_match("/MSIE/", $ua)) {
    header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
    } else if (preg_match("/Firefox/", $ua)) {
    header('Content-Disposition: attachment; filename*="utf8\'\'' . $filename . '"');
    } else {
    header('Content-Disposition: attachment; filename="' . $filename . '"');
    }

    print 'ABC';
    ?>