Есть ли способ использовать PHP для определения того, загружается ли страница с использованием IE6?
Могу ли я обнаружить IE6 с PHP?
Ответ 1
Попробуйте проверить свой агент пользователя на 'MSIE 6.'
.
$using_ie6 = (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== FALSE);
Это основано на этой информации о пользовательском агенте.
Ответ 2
Вы можете обнаружить IE6 с HTML таким образом
<!--[if IE 6]>
// ie6 only stuff here
<![endif]-->
Здесь ссылка на то, как это делается в PHP Way Back Machine но я видел много ложных срабатываний при анализе $_SERVER["HTTP_USER_AGENT"]
для IE6
Ответ 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
}
Ответ 5
Вы можете использовать get_browser с обновленный browser.ini файл.
Ответ 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 в своей строке пользовательского агента.