programing

PHP: Internet Explorer 6, 7, 8, 또는 9의 경우

randomtip 2023. 1. 15. 12:49
반응형

PHP: Internet Explorer 6, 7, 8, 또는 9의 경우

PHP에서 다음과 같은 다양한 버전의 Internet Explorer에 대해 조건을 붙이고 싶습니다.

if($browser == ie6){ //do this} elseif($browser == ie7) { //dothis } elseif...

비슷한 코드에 대해 많은 변형을 봐왔지만 간단한 if나 or other, 그리고 다른 일을 할 수 있는 매우 간단한 코딩을 찾고 있습니다.

감사해요.

편집: 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
  }
}

HTTP_USER_AGENT 서버 변수를 확인할 수 있습니다.IE에 의해 전송된 사용자 에이전트에 MSIE가 포함되어 있습니다.

if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { ... }

특정 버전에 대해 조건을 확장할 수 있습니다.

if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== false) { ... }

관련 질문도 참조해 주세요.

다음은 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
}

나는 이것을 한다.

$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에서 잘못 해석될 수 있기 때문에) 제가 아는 한 가장 쉬운 방법입니다.

if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/(?i)msie|trident|edge/",$_SERVER['HTTP_USER_AGENT'])) {
// eh, IE found
}

PHP를 조사할 수도 있습니다.get_browser(); http://php.net/manual/en/function.get-browser.php

더 많은 기능에 도움이 될 수도 있습니다.

MSFT가 추천하는 javascript sniffing 코드에서 regex를 직접 사용하는 php 함수는 다음과 같습니다.

/**
* 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에서만 사용되는 "Trident"도 필요합니다.여기 버전 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

이것은 매우 신뢰할 수 없고 3가지 방법으로 조작될 수 있으므로 주의해 주십시오.

'HTTP_USER_AGENT' 현재 요청에서 User-Agent: 헤더의 내용(있는 경우).페이지에 액세스하고 있는 사용자 에이전트를 나타내는 문자열입니다.일반적인 예는 Mozilla/4.5 [en](X11; U; Linux 2.2.9 i586)입니다.특히 이 값을 get_browser()와 함께 사용하여 페이지 출력을 사용자 에이전트의 기능에 맞게 조정할 수 있습니다.

브라우저 이름/ID는 $_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]-->

또는 다른 css의 div를 사용합니다.

<!--[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;
}

따라서 이 함수는 'safari' 또는 'firefox' 또는 'chrome' 또는 'ie8', 'ie9', 'ie10', '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을 사용하고 있으며 터치스크린 PC 상에서 실행 중인 경우 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; 
} 
?>

언급URL : https://stackoverflow.com/questions/5302302/php-if-internet-explorer-6-7-8-or-9

반응형