Chcę zrobić warunek w PHP dla różnych wersji Internet Explorera w następujący sposób:
if($browser == ie6){ //do this} elseif($browser == ie7) { //dothis } elseif...
Widziałem wiele odmian podobnego kodu, ale szukam czegoś super prostego, co jest bardzo łatwe do zrobienia w prosty sposób, aby zrobić kilka prostych rzeczy i zrobić różne rzeczy.
Dzięki
EDYCJA: Potrzebuję tego, aby wyświetlać użytkownikom różne komunikaty, więc warunkowe CSS itp. Nie są dobre.
Odpowiedzi:
Oto, co skończyło się na użyciu odmiany, która sprawdza IE8 i poniżej:
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 }
źródło
'/(?i)msie [2-8]/'
. Czy naprawdę musisz sprawdzić np. 1 ? Został wydany w 1995 roku i kilka miesięcy później został zastąpiony przez ie2.'/(?i)msie [1-8]\./'
Wersja, która będzie nadal działać zarówno z IE10, jak i 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 } }
źródło
Trident\/\d{1,2}.\d{1,2};(.*)rv:([0-9]*)
i$version = $matches[1];
należy zmienić na$version = ($matches[2] == 11)?$matches[2]:$matches[1];
. Możesz zobaczyć przykład wyrażenia regularnego tutaj: regexr.com/3fb4k.Możesz sprawdzić zmienną serwera HTTP_USER_AGENT. Agent użytkownika przesłany przez IE zawiera MSIE
if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { ... }
W przypadku określonych wersji możesz przedłużyć swój stan
if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== false) { ... }
Zobacz także to powiązane pytanie .
źródło
preg_match('/Trident\/7.0; rv:11.0/', $_SERVER['HTTP_USER_AGENT'])
Oto świetne źródło informacji na temat wykrywania przeglądarek w php: http://php.net/manual/en/function.get-browser.php
Oto jeden z przykładów, który wydaje się najprostszy:
<?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; } ?>
Później w swoim kodzie możesz powiedzieć coś w rodzaju
$browser = get_user_browser(); if($browser == "ie"){ //do stuff }
źródło
robię to
$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 }
źródło
PHP ma funkcję o nazwie get_browser () , która zwróci obiekt (lub tablicę, jeśli tak wybierzesz) ze szczegółami o przeglądarce użytkownika i jej możliwościach.
Proste spojrzenie dało mi ten kod:
$browser = get_browser( null, true ); if( $browser['name'] == "Firefox" ) if( $browser['majorversion'] == 4 ) echo "You're using Firefox version 4!";
Nie jest to pewny sposób (ponieważ czyta z HTTP_USER_AGENT , który może być sfałszowany i czasami będzie nieprawidłowo analizowany przez php), ale jest to najłatwiejszy sposób, jaki możesz znaleźć, o ile wiem.
źródło
if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/(?i)msie|trident|edge/",$_SERVER['HTTP_USER_AGENT'])) { // eh, IE found }
źródło
Możesz również zajrzeć do http://php.net/manual/en/function.get-browser.php PHP
get_browser();
Może uznasz to za przydatne w przypadku większej liczby funkcji.
źródło
Oto mała funkcja php, którą napisałem, która używa wyrażenia regularnego bezpośrednio z sugerowanego przez MSFT kodu wykrywania javascript z tego artykułu: 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; }
źródło
Sprawdzanie samego MSIE nie wystarczy do wykrycia IE. Potrzebujesz także "Trident", który jest używany tylko w IE11. Oto moje rozwiązanie, które działało w wersjach od 8 do 11.
$agent=strtoupper($_SERVER['HTTP_USER_AGENT']); $isIE=(strpos($agent,'MSIE')!==false || strpos($agent,'TRIDENT')!==false);
źródło
Możesz to zrobić, analizując nagłówek klienta użytkownika:
http://php.about.com/od/learnphp/p/http_user_agent.htm
Uważaj, ponieważ nie jest to zbyt wiarygodne i można je w trywialny sposób podrobić.
źródło
User Agent
można go sfałszować.User-Agent
, chce odzyskać zawartość strony, tak jakby to naprawdę był jego klient użytkownika. Wynik jest taki, o jaki prosili. Nie ma problemu.Zakładam więc, że będziesz w stanie uzyskać nazwę / identyfikator przeglądarki ze zmiennej $ _SERVER ["HTTP_USER_AGENT"].
źródło
Możesz użyć czegoś takiego do różnych wiadomości lub 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]-->
LUB użyj innego elementu div z 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]-->
źródło
ale nadal przydatne - i działa z IE11! oto kolejny krótki sposób na zwrócenie typowych przeglądarek dla klasy 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; }
Więc ta funkcja zwraca: „safari” lub „firefox” lub „chrome”, lub „ie ie8”, „ie ie9”, „ie ie10”, „ie ie11”.
mam nadzieję, że to pomoże
źródło
Zwróć uwagę na przypadek w 'Trident':
if (isset($_SERVER['HTTP_USER_AGENT']) && ((strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) || strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== false)) { // IE is here :-( }
źródło
jeśli masz Internet Explorer 11 i działa on na komputerze z ekranem dotykowym, musisz użyć: preg_match ('/ Trident / 7.0; Touch; rv: 11.0 /', $ _SERVER ['HTTP_USER_AGENT']) zamiast: preg_match ('/ Trident / 7.0; rv: 11.0 / ', $ _SERVER [' HTTP_USER_AGENT '])
źródło
Lepsze byłoby podejście oparte na trójdendach. Oto szybka funkcja sprawdzania IE 8.
<?php function is_IE8(){ if(strpos(str_replace(' ', '', $_SERVER['HTTP_USER_AGENT']),'Trident/4.0')!== FALSE){ return TRUE; }; return FALSE; } ?>
źródło