Я хочу сделать условное выражение в PHP для разных версий Internet Explorer в соответствии с:
if($browser == ie6){ //do this} elseif($browser == ie7) { //dothis } elseif...
Я видел много вариаций по подобному коду, но искал что-то супер простое, что очень легко закодировать, чтобы делать некоторые простые, если и еще, и делать разные вещи.
благодаря
EDIT: Мне нужно это, чтобы показать несколько разных сообщений пользователям, так что условные выражения CSS и т. Д. Не подходят.
Это то, что я в конечном итоге использовал вариант, который проверяет 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. Пользовательский агент, переданный IE, содержит 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), но это самый простой из них, который вы можете найти, насколько я знаю.
Вы также можете посмотреть на get_browser();
PHP get_browser();
http://php.net/manual/en/function.get-browser.php
Возможно, вы найдете его полезным для большего количества функций.
if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/(?i)msie|trident|edge/",$_SERVER['HTTP_USER_AGENT'])) { // eh, IE found }
Вот небольшая функция php, которую я написал, которая использует регулярное выражение непосредственно из предложенного MSFT кода для нюхания javascript из этой статьи: 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. Вам также нужен «Trident», который используется только в IE11. Итак, вот мое решение, в котором работали версии с 8 по 11.
$agent=strtoupper($_SERVER['HTTP_USER_AGENT']); $isIE=(strpos($agent,'MSIE')!==false || strpos($agent,'TRIDENT')!==false);
Вы можете это сделать, разобрав заголовок 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]-->
но все же полезно – и работает с 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» или «chrome», или «ie ie8», т.е. ie9 ',' ie ie10 ',' ie ie11 '.
Надеюсь, поможет
Обратите внимание на случай в «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 '])
Было бы лучше использовать подход на основе трех методов. Вот быстрая функция проверки IE 8.
<?php function is_IE8(){ if(strpos(str_replace(' ', '', $_SERVER['HTTP_USER_AGENT']),'Trident/4.0')!== FALSE){ return TRUE; }; return FALSE; } ?>