PHP: если Internet Explorer 6, 7, 8 или 9
Я хочу сделать условное выражение в PHP для разных версий Internet Explorer в соответствии с:
if($browser == ie6){ //do this} elseif($browser == ie7) { //dothis } elseif...
Я видел много вариаций на подобном коде, но искал что-то супер простое, что очень легко кодировать, чтобы делать какие-то простые if и else и делать разные вещи.
Спасибо
EDIT: Мне нужно это, чтобы показать несколько разных сообщений пользователям, поэтому условия CSS и т.д. не являются хорошими.
Ответы
Ответ 1
Это то, что я в конечном итоге использовал в качестве варианта, который проверяет 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
}
Ответ 2
Версия, которая будет продолжать работать как с 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
}
}
Ответ 3
Вот отличный ресурс для обнаружения браузеров в 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
}
Ответ 4
Вы можете проверить переменную сервера HTTP_USER_AGENT. Пользовательский агент, переданный IE, содержит MSIE
if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { ... }
Для конкретных версий вы можете расширить свое состояние
if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== false) { ... }
Также см. этот связанный вопрос.
Ответ 5
Я делаю это
$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
}
Ответ 6
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), но это самый простой, который вы можете найти, насколько я знаю.
Ответ 7
Вы также можете посмотреть в PHP get_browser();
http://php.net/manual/en/function.get-browser.php
Возможно, вы найдете его полезным для большего количества функций.
Ответ 8
Вот небольшая функция 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;
}
Ответ 9
if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/(?i)msie|trident|edge/",$_SERVER['HTTP_USER_AGENT'])) {
// eh, IE found
}
Ответ 10
Проверка только для MSIE недостаточна для обнаружения IE. Вам также нужен "Trident", который используется только в IE11. Итак, вот мое решение, в котором работали версии с 8 по 11.
$agent=strtoupper($_SERVER['HTTP_USER_AGENT']);
$isIE=(strpos($agent,'MSIE')!==false || strpos($agent,'TRIDENT')!==false);
Ответ 11
Вы можете сделать это, разобрав заголовок user-agent:
http://php.about.com/od/learnphp/p/http_user_agent.htm
Будьте осторожны, что это не очень надежно и может быть тривиально подделано.
Ответ 12
'HTTP_USER_AGENT' Содержимое заголовка User-Agent: из текущего запроса, если таковой имеется. Это строка, обозначающая пользовательский агент, который обращается к странице. Типичный пример: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Помимо всего прочего, вы можете использовать это значение с помощью get_browser(), чтобы настроить выход страницы на возможности пользовательского агента.
Итак, я предполагаю, что вы сможете получить имя/идентификатор браузера из переменной $_SERVER [ "HTTP_USER_AGENT" ].
Ответ 13
Вы можете использовать что-то вроде этого для разных сообщений или 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]-->
Ответ 14
но все же полезно - и работает с 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;
}
Таким образом, эта функция возвращает: "safari" или "firefox" или "chrome", или "ie ie8", т.е. ie9 ', т.е. ie10', 'ie ie11'.
надеюсь, что это поможет
Ответ 15
Обратите внимание на случай в "Trident":
if (isset($_SERVER['HTTP_USER_AGENT']) &&
((strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) || strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== false)) {
// IE is here :-(
}
Ответ 16
если у вас есть 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'])
Ответ 17
Трехдневный подход будет лучше.
Вот быстрая функция проверки IE 8.
<?php
function is_IE8(){
if(strpos(str_replace(' ', '', $_SERVER['HTTP_USER_AGENT']),'Trident/4.0')!== FALSE){
return TRUE;
};
return FALSE;
}
?>