asp.Net判断ブラウザバージョンコード
5308 ワード
string UserBrowser=Request.Browser.Browser;//ブラウザ名
string BrowserVersion=Request.Browser.Version;//ブラウザバージョン
以下MSDN HttpBrowserCapabilities bc=Requestから抜粋する.Browser; Response.Write( "
"); 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でダウンロードしたファイル名を設定するのも、ご存知の方も多いのではないでしょうか.基本的に、ダウンロードプログラムはこのように書かれています.
これによりブラウザで開くdocumentをダウンロードできる.doc.
ただし、$filenameがUTF-8でエンコードされている場合、一部のブラウザでは正常に処理できない場合があります.例えば、上記のプログラムを少し変更します.
プログラムをUTF-8コードに保存して再アクセスすると、IE 6からダウンロードしたファイル名が文字化けしてしまいます.FF 3でダウンロードしたファイル名は「中国語」のみ.Opera 9ですべて正常です.
出力ヘッダは実際には次のようになります.
実はRFC2231の定義に従って、多言語符号化のContent-Dispositionはこのように定義すべきである.
次のようになります. 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)
サポートされていないようですか?上記の方法はすべてだめです
このように、すべての主流ブラウザをサポートするには、プログラムがこのように書かなければなりません.
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"
次のようになります.
実験の結果、いくつかの主流ブラウザのサポート状況は以下の通りであることが分かった.
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';
?>