Могу ли я обнаружить IE6 с PHP? - PullRequest
48 голосов
/ 23 марта 2009

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

Ответы [ 17 ]

64 голосов
/ 23 марта 2009

Попробуйте проверить их пользовательский агент для 'MSIE 6.'.

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

Это основано на этой информации агента пользователя .

28 голосов
/ 23 марта 2009

Таким способом вы можете обнаружить IE6 с HTML

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

Вот ссылка о том, как это делается в PHP Путь назад машина , но я видел много ложных срабатываний при разборе $_SERVER["HTTP_USER_AGENT"] для IE6

15 голосов
/ 23 марта 2009

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

колодец ПЛАК ...

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

  if(preg_match('/msie [2-6]/i',$_SERVER['HTTP_USER_AGENT'])) {
   // if IE<=6
  } else {
   //if IE>6
  }
9 голосов
/ 23 марта 2009

Вы можете использовать get_browser с обновленным файлом browscap.ini .

6 голосов
/ 14 сентября 2010

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

например ...

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

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

3 голосов
/ 23 марта 2009

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

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

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

2 голосов
/ 04 января 2011

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

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 голосов
/ 28 марта 2011

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" в середине ...

1 голос
/ 25 июня 2010

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

Я считаю, что гораздо более надежный метод:

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