web-dev-qa-db-ja.com

IE6をPHPで検出できますか?

IE6を使用してページがロードされているかどうかを検出するためにPHPを使用する方法はありますか?

48
PHLAK

ユーザーエージェントの'MSIE 6.'を確認してください。

$using_ie6 = (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== FALSE);

これは、 このユーザーエージェント情報 に基づいています。

64
Jeremy Ruten

この方法でIE6をHTMLで検出できます

<!--[if IE 6]>
// ie6 only stuff here
<![endif]-->

PHPでの実行方法に関するリンクですウェイバックマシン しかし、IE6の$_SERVER["HTTP_USER_AGENT"]の解析で多くの誤検知を見てきました

28
Ólafur Waage

Operaは、多くの場合、「MSIE 6.0」を含むユーザーエージェント文字列で自身を識別するため、このページのユーザーエージェントベースの回答の多くは信頼性が高くありません。

Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686; en) Opera 9.51

これは、Opera 5から9および偶数Opera 10のすべてのバージョンに影響し、Opera内からオンまたはオフにできます。 このページを参照

私が見た一般的なアプローチは、「MSIE」と「Opera」に対してテストすることです。例えば、

if (preg_match('/\bmsie 6/i', $ua) && !preg_match('/\bopera/i', $ua))
  echo "We have IE6!";
15
thomasrutter

よくPHLAK ...

私はこれがはるかに優れていると思う:P

  if(preg_match('/msie [2-6]/i',$_SERVER['HTTP_USER_AGENT'])) {
   // if IE<=6
  } else {
   //if IE>6
  }
12
marverix

get_browserbrowscap.iniファイルの更新 とともに使用できます。

9
OIS

他の誰もが言ったように、ユーザーエージェントをチェックするだけでwillが誤検出されるので... both、ユーザーエージェントのチェック、条件付きコメントを使用しないでください。

例えば...

<? if (preg_match('/\bmsie 6/i', $_SERVER['HTTP_USER_AGENT']) { ?>
  <!--[if IE 6]>
    // ie6 only stuff here
  <![endif]-->
<? } ?>

この方法では、この不要なコードをほとんどのブラウザに送り返すことはありませんが、誤検知が発生しても安全です。

6
broox

can、HTTP User-Agentヘッダーを使用しますが、可能であればそれを行わないことを強くお勧めします。 User-Agentヘッダーは、正確に解析するのが非常に難しく、単純な文字列マッチングで誤検知が発生する傾向があります。他のブラウザーのふりをしているブラウザーの問題を無視することさえあります。たとえば、ジェレミーの「MSIE 6」 stringは、IE Mobileと一致します。これはIE6とは大きく異なるため、通常はそれらを統合したくないでしょう。

さらに、異なるHTMLを異なるブラウザーに送信する場合は、「Vary」ヘッダーを使用して(キャッシュの効率を低下させる)、キャッシュが異なるブラウザーに間違ったページを送信しないようにする必要があります。

したがって、ブラウザの差別化を行うための別の場所を見つけることができれば、それは間違いなく最高です。条件付きコメントを使用したÓlafurのアプローチは、通常、JavaScriptおよびHTMLマークアップ/ CSSリンクを変更するための最も単純なアプローチです。

3
bobince

if(substr($_SERVER['HTTP_USER_AGENT'],0,34)=="Mozilla/4.0 (compatible; MSIE 6.0;") echo "I am stupid IE6";

IE 6は常に「Mozilla/4.0(compatible; MSIE 6.0;」で始まります。IE 7,8には「MSIE 6」があります...

2
Bongo

多くのブラウザで使用できますが、時間がかかり、時には誤検知もあります...

function do_stylesheet_link() {
// Picks up appropriate css file depending on the user-agent

//  if ( stristr($_SERVER['HTTP_USER_AGENT'], 'Firefox') ) {
//echo '<link rel="stylesheet" href="css/firefox.css" type="text/css" />'; }    

//elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'Chrome') ) {
//echo '<link rel="stylesheet" href="css/chrome.css" type="text/css" />'; }

//elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'Safari') ) {
//echo '<link rel="stylesheet" href="css/safari.css" type="text/css" />'; }

//elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'Opera') ) {
//echo '<link rel="stylesheet" href="css/opera.css" type="text/css" />'; }

    if ( stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') )  {
echo '<link rel="stylesheet" href="css/ie6.css" type="text/css" />'; }

elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 7.') ) {
echo '<link rel="stylesheet" href="css/ie7.css" type="text/css" />'; }

elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 8.') ) {
echo '<link rel="stylesheet" href="css/ie8.css" type="text/css" />'; }

else {
echo '<link rel="stylesheet" href="css/style.css" type="text/css" />';
}

}

2
Alex
function isIE($versions=array()) {
    if (!empty($versions))
        $versions = '('.implode('|',$versions).')';
    else
        $versions = '1?\d';
    $ua = $_SERVER['HTTP_USER_AGENT'];
    $is_not_opera = false===stripos($ua, 'opera');
    return $is_not_opera && preg_match('/\bmsie '.$versions.'\./i', $ua);
}

を使用して:

$is_ie = isIE(); //Any version
$is_ie_7 = isIE(array(7)); //IE 7
$is_old_id = isIE(array(6,7));//IE 7 and 8
1
AndreyP

リストされているメソッドは、特定のプラグイン(たとえば、MathPlayer、およびいくつかのマルウェアツールバー)を備えたブラウザーにフラグを立てます。

私ははるかに信頼性の高い方法があります:

if( preg_match('/^Mozilla\/4\.0 \(compatible; MSIE 6/', $_SERVER['HTTP_USER_AGENT']) != 0 )
1
AJ-D

おかげで、次の関数を作成し、必要に応じて呼び出すことになりました。

// IE6 Check
function isIE() {
  $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);
  if (ereg("msie 6.0", $userAgent)) {
    return true;
  } else {
    return false;
  }
}
1
PHLAK

よりシンプルなもの:

if(stristr(strtolower($_SERVER['HTTP_USER_AGENT']), "msie 6.0")) {
    // IE6? Aren't you out of fashion yet?
}
1
Tragedy

非常に役立つスレッド。 IE6の<?xml>宣言を隠すためにこれを使用しました。 IE6はdoctypeスニッフィングについてドキュメントの最初の行のみをチェックします。つまり、<?xml>文字列が存在する場合、IE6は<?xml>宣言に続くdoctypeに関係なくquirksモードでレンダリングします。

operaチェックを含めることが重要かどうかはわかりませんが、とにかくそれを含めました。

//check if IE 6 or less
$not_lte_ie6 = true;
$ua = strtolower($_SERVER['HTTP_USER_AGENT']);
if(strpos($ua,'msie') !== FALSE) {
    if(strpos($ua,'opera') === FALSE) {
        if(preg_match('/(?i)msie [1-6]/',$ua)) $not_lte_ie6 = false;
    }
}
if ($not_lte_ie6)
    echo "<?xml version='1.0' encoding='UTF-8'?>\n";
0
niall.campbell
function isOldIE() {
    // don't support IE6 or below
    return preg_match('/MSIE [1-6]/', $_SERVER['HTTP_USER_AGENT']);
}
0
philfreo