PHP: если internet explorer 6, 7, 8 или 9
Я хочу сделать условное в PHP для разных версий Internet Explorer по строкам:
if($browser == ie6){ //do this} elseif($browser == ie7) { //dothis } elseif...
Я видел много вариантов подобного кода, но ищу что-то супер простое, что очень легко кодировать, чтобы сделать некоторые простые if и else и делать разные вещи.
спасибо
EDIT: мне нужно это, чтобы показать некоторые различные сообщения для пользователей, поэтому CSS conditionals и т. д. не годятся.
17 ответов:
Это то, что я в конечном итоге с помощью вариации, которая проверяет IE8 и ниже:
if (preg_match('/MSIE\s(?P<v>\d+)/i', @$_SERVER['HTTP_USER_AGENT'], $B) && $B['v'] <= 8) { // Browsers IE 8 and below } else { // All other browsers }
версия, которая будет продолжать работать как с IE10, так и с IE11:
preg_match('/MSIE (.*?);/', $_SERVER['HTTP_USER_AGENT'], $matches); if(count($matches)<2){ preg_match('/Trident\/\d{1,2}.\d{1,2}; rv:([0-9]*)/', $_SERVER['HTTP_USER_AGENT'], $matches); } if (count($matches)>1){ //Then we're using IE $version = $matches[1]; switch(true){ case ($version<=8): //IE 8 or under! break; case ($version==9 || $version==10): //IE9 & IE10! break; case ($version==11): //Version 11! break; default: //You get the idea } }
вот отличный ресурс для обнаружения браузеров в php:http://php.net/manual/en/function.get-browser.php
вот один из примеров, который кажется самым простым:
<?php function get_user_browser() { $u_agent = $_SERVER['HTTP_USER_AGENT']; $ub = ''; if(preg_match('/MSIE/i',$u_agent)) { $ub = "ie"; } elseif(preg_match('/Firefox/i',$u_agent)) { $ub = "firefox"; } elseif(preg_match('/Safari/i',$u_agent)) { $ub = "safari"; } elseif(preg_match('/Chrome/i',$u_agent)) { $ub = "chrome"; } elseif(preg_match('/Flock/i',$u_agent)) { $ub = "flock"; } elseif(preg_match('/Opera/i',$u_agent)) { $ub = "opera"; } return $ub; } ?>потом в вашем коде, вы могли бы сказать что-то вроде
$browser = get_user_browser(); if($browser == "ie"){ //do stuff }
вы можете проверить переменную сервера HTTP_USER_AGENT. Агент пользователя перенесенный т. е. содержит MSIE
if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { ... }для конкретных версий вы можете расширить свое состояние
if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== false) { ... }см. Также этот вопрос.
Я делаю это
$u = $_SERVER['HTTP_USER_AGENT']; $isIE7 = (bool)preg_match('/msie 7./i', $u ); $isIE8 = (bool)preg_match('/msie 8./i', $u ); $isIE9 = (bool)preg_match('/msie 9./i', $u ); $isIE10 = (bool)preg_match('/msie 10./i', $u ); if ($isIE9) { //do ie9 stuff }
PHP имеет функцию с именем функцией get_browser() что будет возвращать объект (или массив, если вы так выбираете) с подробной информацией о браузере пользователя и что он может сделать.
простой просмотр дал мне этот код:
$browser = get_browser( null, true ); if( $browser['name'] == "Firefox" ) if( $browser['majorversion'] == 4 ) echo "You're using Firefox version 4!";Это не верный способ (как он читает из HTTP_USER_AGENT, который может быть подделан, и иногда будет проанализирован неправильно php), но это самый простой, который вы можете найти, насколько я знаю.
вы также можете посмотреть в PHP
get_browser();http://php.net/manual/en/function.get-browser.phpвозможно, вы найдете его полезным для большего количества функций.
вот небольшая функция php, которую я написал, которая использует регулярное выражение непосредственно из предложенного MSFT кода JavaScript sniffing из этой статьи:http://msdn.microsoft.com/en-us/library/ms537509 (v=vs. 85). aspx
/** * Returns the version of Internet Explorer or false */ function isIE(){ $isIE = preg_match("/MSIE ([0-9]{1,}[\.0-9]{0,})/",$_SERVER['HTTP_USER_AGENT'],$version); if($isIE){ return $version[1]; } return $isIE; }
проверка только для MSIE недостаточно для обнаружения IE. Вам также нужен "трезубец", который используется только в IE11. Так вот мое решение, которое работало с версии 8 до 11.
$agent=strtoupper($_SERVER['HTTP_USER_AGENT']); $isIE=(strpos($agent,'MSIE')!==false || strpos($agent,'TRIDENT')!==false);
if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/(?i)msie|trident|edge/",$_SERVER['HTTP_USER_AGENT'])) { // eh, IE found }
вы можете сделать это с помощью разбора заголовка user-agent:
http://php.about.com/od/learnphp/p/http_user_agent.htm
будьте осторожны, что это не очень надежный и может быть легко подделана.
'HTTP_USER_AGENT' Содержимое заголовка User-Agent: из текущего запроса, если таковой имеется. Это строка, обозначающая агент пользователя, который обращается к странице. Типичный пример: Mozilla / 4.5 [en] (X11; U; Linux 2.2.9 i586). Помимо прочего, вы можете использовать это значение с get_browser (), чтобы адаптировать вывод вашей страницы к возможностям пользовательского агента.
поэтому я предполагаю, что вы сможете получить имя/идентификатор браузера от Переменная $_SERVER["HTTP_USER_AGENT"].
вы можете использовать что-то вроде этого для разных сообщений или div/css
<!--[if IE 6]> <style type="text/css"> div.ie6 { display:block; } </style> <![endif]--> <!--[if IE 7]> <style type="text/css"> div.ie7 { display:block; } </style> <![endif]--> <!--[if IE 8]> <style type="text/css"> div.ie8 { display:block; } </style> <![endif]--> <!--[if IE 9]> message1 <![endif]--> <!--[if !IE 6]> message2 <![endif]--> <!--[if lt IE 8]> message3 <![endif]-->или использовать различные div css
<!--[if lte IE 8]> <style type="text/css"> div.lteie8 { display:block; } </style> <![endif]--> <!--[if gt IE 6]> <style type="text/css"> div.gtie6 { display:block; } </style> <![endif]--> <!--[if gte IE 6]> <style type="text/css"> div.gteie6 { display:block; } </style> <![endif]-->
обратите внимание на случай в 'Trident':
if (isset($_SERVER['HTTP_USER_AGENT']) && ((strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) || strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== false)) { // IE is here :-( }
Если у вас есть Internet Explorer 11 и он работает на ПК с сенсорным экраном, вы должны использовать: preg_match ('/Trident/7.0; Touch; rv: 11.0/', $_SERVER ['HTTP_USER_AGENT']) вместо: preg_match ('/Trident/7.0; rv:11.0/', $_SERVER ['HTTP_USER_AGENT'])
но все равно полезно - и работает с IE11 ! вот еще один короткий способ получить общие браузеры, возвращаемые для класса css:
function get_browser() { $browser = ''; $ua = strtolower($_SERVER['HTTP_USER_AGENT']); if (preg_match('~(?:msie ?|trident.+?; ?rv: ?)(\d+)~', $ua, $matches)) $browser = 'ie ie'.$matches[1]; elseif (preg_match('~(safari|chrome|firefox)~', $ua, $matches)) $browser = $matches[1]; return $browser; }Так что эта функция возвращает: 'сафари' или 'Firefox или хром', или 'т. е. в IE8', 'т. е. ие9', 'т. е. в IE10', 'т. е. в IE11'.
надеюсь, что это помогает
подход на основе трезубца был бы лучше. Вот быстрая функция для проверки IE 8.
<?php function is_IE8(){ if(strpos(str_replace(' ', '', $_SERVER['HTTP_USER_AGENT']),'Trident/4.0')!== FALSE){ return TRUE; }; return FALSE; } ?>
Comments