Saya ingin melakukan kondisional dalam PHP untuk berbagai versi Internet Explorer di sepanjang baris:
if($browser == ie6){ //do this} elseif($browser == ie7) { //dothis } elseif...
Saya telah melihat banyak variasi pada kode yang serupa, tetapi mencari sesuatu yang super sederhana yang sangat mudah untuk dikodekan untuk melakukan beberapa hal yang sederhana dan melakukan hal yang berbeda.
Terima kasih
EDIT: Saya membutuhkan ini untuk menampilkan beberapa pesan berbeda kepada pengguna sehingga persyaratan CSS dll tidak baik.
Jawaban:
Inilah yang akhirnya saya gunakan variasi, yang memeriksa IE8 dan di bawahnya:
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 }
sumber
'/(?i)msie [2-8]/'
. Apakah Anda benar-benar perlu memeriksa ie 1 ? Ini dirilis pada tahun 1995 dan digantikan oleh IE2 beberapa bulan kemudian.'/(?i)msie [1-8]\./'
Versi yang akan terus berfungsi dengan IE10 dan 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 } }
sumber
Trident\/\d{1,2}.\d{1,2};(.*)rv:([0-9]*)
dan$version = $matches[1];
harus diubah menjadi$version = ($matches[2] == 11)?$matches[2]:$matches[1];
. Anda dapat melihat contoh regex di sini: regexr.com/3fb4k.Anda dapat memeriksa variabel server HTTP_USER_AGENT. Agen pengguna yang ditransfer oleh IE berisi MSIE
if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { ... }
Untuk versi tertentu, Anda dapat memperpanjang kondisi Anda
if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== false) { ... }
Lihat juga pertanyaan terkait ini .
sumber
preg_match('/Trident\/7.0; rv:11.0/', $_SERVER['HTTP_USER_AGENT'])
Berikut adalah sumber yang bagus untuk mendeteksi browser di php: http://php.net/manual/en/function.get-browser.php
Berikut ini salah satu contoh yang tampaknya paling sederhana:
<?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; } ?>
Kemudian di kode Anda, Anda bisa mengatakan sesuatu seperti
$browser = get_user_browser(); if($browser == "ie"){ //do stuff }
sumber
saya melakukan ini
$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 }
sumber
PHP memiliki fungsi bernama get_browser () yang akan mengembalikan objek (atau larik jika Anda memilihnya) dengan detail tentang browser pengguna dan apa yang dapat dilakukannya.
Tampilan sederhana memberi saya kode ini:
$browser = get_browser( null, true ); if( $browser['name'] == "Firefox" ) if( $browser['majorversion'] == 4 ) echo "You're using Firefox version 4!";
Ini bukan cara yang pasti (karena terbaca dari HTTP_USER_AGENT , yang dapat dipalsukan, dan terkadang akan salah dianalisis oleh php), tetapi ini adalah cara termudah yang dapat Anda temukan sejauh yang saya tahu.
sumber
if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/(?i)msie|trident|edge/",$_SERVER['HTTP_USER_AGENT'])) { // eh, IE found }
sumber
Anda juga dapat melihat http://php.net/manual/en/function.get-browser.php PHP
get_browser();
Mungkin Anda akan merasa berguna untuk lebih banyak fitur.
sumber
Berikut adalah sedikit fungsi php yang saya tulis yang menggunakan regex langsung dari kode sniffing javascript yang disarankan MSFT dari artikel ini: 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; }
sumber
Memeriksa MSIE saja tidak cukup untuk mendeteksi IE. Anda juga membutuhkan "Trident" yang hanya digunakan di IE11. Jadi inilah solusi saya yang berfungsi untuk versi 8 hingga 11.
$agent=strtoupper($_SERVER['HTTP_USER_AGENT']); $isIE=(strpos($agent,'MSIE')!==false || strpos($agent,'TRIDENT')!==false);
sumber
Anda dapat melakukannya dengan mengurai header agen-pengguna:
http://php.about.com/od/learnphp/p/http_user_agent.htm
Berhati-hatilah karena ini tidak terlalu andal dan dapat dipalsukan secara sepele.
sumber
User Agent
bisa dipalsukan.User-Agent
, mereka ingin mengambil konten laman seolah-olah itu benar-benar agen penggunanya. Hasilnya adalah apa yang mereka minta. Tidak masalah disini.Jadi saya berasumsi Anda akan bisa mendapatkan nama / id browser dari variabel $ _SERVER ["HTTP_USER_AGENT"].
sumber
Anda dapat menggunakan sesuatu seperti ini untuk pesan atau div / css yang berbeda
<!--[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]-->
ATAU gunakan div css yang berbeda
<!--[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]-->
sumber
tetapi masih berguna - dan berfungsi dengan IE11! berikut adalah cara singkat lain untuk mendapatkan kembali browser umum untuk kelas 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; }
Jadi fungsi ini mengembalikan: 'safari' atau 'firefox' atau 'chrome', atau 'ie ie8', 'ie ie9', 'ie ie10', 'ie ie11'.
semoga membantu
sumber
Perhatikan kasus di 'Trident':
if (isset($_SERVER['HTTP_USER_AGENT']) && ((strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) || strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== false)) { // IE is here :-( }
sumber
jika Anda memiliki Internet Explorer 11 dan berjalan melalui pc layar sentuh, Anda harus menggunakan: preg_match ('/ Trident / 7.0; Touch; rv: 11.0 /', $ _SERVER ['HTTP_USER_AGENT']) alih-alih: preg_match ('/ Trident / 7.0; rv: 11.0 / ', $ _SERVER [' HTTP_USER_AGENT '])
sumber
Pendekatan berbasis trisula akan lebih baik. Berikut adalah fungsi cepat untuk memeriksa IE 8.
<?php function is_IE8(){ if(strpos(str_replace(' ', '', $_SERVER['HTTP_USER_AGENT']),'Trident/4.0')!== FALSE){ return TRUE; }; return FALSE; } ?>
sumber