Есть ли способ использовать PHP для определения того, загружается ли страница с использованием IE6?
Попробуйте проверить свой агент пользователя на 'MSIE 6.'
,
$using_ie6 = (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== FALSE);
Это основано на информации этого агента пользователя .
Вы можете обнаружить IE6 с HTML таким образом
<!--[if IE 6]> // ie6 only stuff here <![endif]-->
Вот ссылка на то, как это делается в PHP Way Back Machine, но я видел много ложных срабатываний при анализе $_SERVER["HTTP_USER_AGENT"]
для IE6
Многие ответы на основе пользовательского агента на этой странице не слишком надежны, поскольку Opera часто идентифицирует себя со строкой user-agent, содержащей «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!";
хорошо PHLAK …
я думаю, что это намного лучше: P
if(preg_match('/msie [2-6]/i',$_SERVER['HTTP_USER_AGENT'])) { // if IE<=6 } else { //if IE>6 }
Вы можете использовать get_browser с обновленным файлом browscap.ini .
Как и все остальные, есть ложные срабатывания, просто проверяя агент пользователя … так почему бы не использовать как проверку агента пользователя, так и условный комментарий.
например…
<? if (preg_match('/\bmsie 6/i', $_SERVER['HTTP_USER_AGENT']) { ?> <!--[if IE 6]> // ie6 only stuff here <![endif]--> <? } ?>
Таким образом, вы не будете отправлять этот ненужный код большинству браузеров … но все равно будете в безопасности в случае ложного позитива.
Вы можете использовать заголовок HTTP-User-Agent, но я настоятельно рекомендую не делать этого, если это возможно. Заголовок User-Agent очень сложно разобрать точно и стремится к ложным срабатываниям с простым сопоставлением строк, даже игнорируя проблему браузеров, которые притворяются другими браузерами. Например, строка «MSIE 6.» Джереми будет соответствовать IE Mobile, которая очень сильно отличается от IE6, которую вы обычно не хотите связывать с ними.
Плюс, когда вы отправляете разные HTML-файлы в разные браузеры, вам нужно использовать заголовок «Vary» (что делает кеши менее эффективными), чтобы избежать того, что кэши отправляют неверные страницы в разные браузеры.
Поэтому, если вы можете найти другое место для дифференциации браузера, это определенно лучше всего. Подход Ólafur с условными комментариями обычно является самым простым подходом к изменению ссылок JavaScript и HTML разметки / CSS.
Вы можете использовать его для многих браузеров, но это отнимает много времени, а иногда и ложно.
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" />'; }
}
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» в середине …
Спасибо, ребята, я закончил создание следующей функции и назвал ее по мере необходимости:
// IE6 Check function isIE() { $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']); if (ereg("msie 6.0", $userAgent)) { return true; } else { return false; } }
Перечисленные методы часто будут указывать браузеры с определенными плагинами (например, MathPlayer, а также некоторые панели инструментов для вредоносных программ).
Я нахожу гораздо более надежный метод:
if( preg_match('/^Mozilla\/4\.0 \(compatible; MSIE 6/', $_SERVER['HTTP_USER_AGENT']) != 0 )
Что-то более простое:
if(stristr(strtolower($_SERVER['HTTP_USER_AGENT']), "msie 6.0")) { // IE6? Aren't you out of fashion yet? }
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
function isOldIE() { // don't support IE6 or below return preg_match('/MSIE [1-6]/', $_SERVER['HTTP_USER_AGENT']); }
очень полезная нить. Я использовал это, чтобы скрыть объявление <?xml>
для IE6. Оказывается, IE6 проверяет только первую строку документа для snype для doctype, а это означает, что если присутствует строка <?xml>
, IE6 будет отображаться в режиме quirks независимо от типа doctype, следующего за объявлением <?xml>
Xml <?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";
Функция preg_match () вместо preg (), но хорошая!
Примечание. IE8 также указывает, что он совместим с IE6 в своей строке user-agent.