Подтвердить что ты не робот

Могу ли я обнаружить IE6 с PHP?

Есть ли способ использовать PHP для определения того, загружается ли страница с использованием IE6?

4b9b3361

Ответ 3

Многие ответы на основе пользовательского агента на этой странице не слишком надежны, поскольку 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!";

Ответ 4

well PHLAK...

Я думаю, что это намного лучше: P

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

Ответ 6

Как и все остальные, существует будет ложным срабатыванием, просто проверяя агент пользователя... так почему бы не использовать и, проверку пользовательского агента и условный комментарий.

например...

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

Таким образом, вы не отправляете этот ненужный код большинству браузеров... но все равно будете в безопасности при ложном срабатывании.

Ответ 7

Вы можете использовать заголовок HTTP-User-Agent, но я настоятельно рекомендую не делать этого, если это возможно. Заголовок User-Agent очень трудно разобрать точно и имеет тенденцию к ложным срабатываниям с простым сопоставлением строк - даже игнорируя проблему браузеров, которые притворяются другими браузерами. Например, Джереми "MSIE 6." строка будет соответствовать IE Mobile, которая очень сильно отличается от IE6, которую вы обычно не хотите связывать с ними.

Плюс, когда вы отправляете разные HTML файлы в разные браузеры, вы должны использовать заголовок Vary (что делает кеши менее эффективными), чтобы кэши не отправляли неправильные страницы в разные браузеры.

Итак, если вы можете найти другое место для дифференциации браузера, которое, безусловно, лучше всего. Ólafur подход с условными комментариями, как правило, самый простой подход для изменения ссылок JavaScript и HTML разметки/CSS.

Ответ 8

Вы можете использовать его для многих браузеров, но это занимает много времени, а иногда и ложно.

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" />';
}

}

Ответ 9

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 (совместимо; MSIE 6.0;" IE 7,8 имеют "MSIE 6" в середине...

Ответ 10

Спасибо, ребята, я создал следующую функцию и назвал ее по мере необходимости:

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

Ответ 11

В перечисленных ниже методах часто будут отображаться браузеры с определенными плагинами (например, MathPlayer, а также некоторые панели инструментов вредоносного ПО).

Я нахожу гораздо более надежный метод:

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

Ответ 12

Что-то проще:

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

Ответ 13

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

Ответ 14

очень полезная тема. Я использовал это, чтобы скрыть объявление <?xml> для IE6. Оказывается, IE6 проверяет только первую строку документа для snype для doctype, а это означает, что если присутствует строка <?xml>, IE6 будет отображать в режиме quirks независимо от типа doctype, следующего за объявлением <?xml>

Я не уверен, что его критически включить оперный чек еще, но все равно включил его.

//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";

Ответ 15

function isOldIE() {
    // don't support IE6 or below
    return preg_match('/MSIE [1-6]/', $_SERVER['HTTP_USER_AGENT']);
}

Ответ 16

Функция preg_match() вместо preg(), но хорошая!

Ответ 17

Примечание. IE8 также указывает, что он совместим с IE6 в своей строке пользовательского агента.