如何在PHP中进行浏览器检测-IE(版本)

5

我找到了这段用于通过php检测浏览器的代码:

<?php
$msie = strpos($_SERVER["HTTP_USER_AGENT"], 'MSIE') ? true : false;
$firefox = strpos($_SERVER["HTTP_USER_AGENT"], 'Firefox') ? true : false;
$safari = strpos($_SERVER["HTTP_USER_AGENT"], 'Safari') ? true : false;
$chrome = strpos($_SERVER["HTTP_USER_AGENT"], 'Chrome') ? true : false;
?>

<?php
//Firefox
if ($firefox) {
echo 'you are using Firefox!';
echo '<br />';
}

// Safari or Chrome. Both use the same engine - webkit
if ($safari || $chrome) { 
echo 'you are using a webkit powered browser';
echo '<br />';
}

// IE
if ($msie) {
echo '<br>you are using Internet Explorer<br>';
echo '<br />';
}?>

源链接

但是这段代码并没有包括IE的各个版本。可以像下面这样处理:

// IE7
if ($msie7) {
echo '<br>you are using Internet Explorer 7<br>';
echo '<br />';
}

有人能帮我吗?想要改进代码以支持IE版本。


打印出不同版本的IE浏览器中的变量$_SERVER["HTTP_USER_AGENT"],并查看如何解析它以显示不同的消息。 - Tommy
警告:HTTP_USER_AGENT 可以被请求网页的客户端操纵。因此不要完全依赖它。 - bansi
http://il1.php.net/get_browser - 请注意查看评论。 - Amnon
你可能会对这两个类感兴趣 http://www.phpclasses.org/package/6369-PHP-Detect-the-type-of-browser-accessing-the-site.html 和 http://ellislab.com/codeigniter/user-guide/libraries/user_agent.html - bansi
3个回答

6

试试这个:

<?php
    $ie6 = (ereg("MSIE 6", $_SERVER["HTTP_USER_AGENT"])) ? true : false;
    $ie7 = (ereg("MSIE 7", $_SERVER["HTTP_USER_AGENT"])) ? true : false;
    $ie8 = (ereg("MSIE 8", $_SERVER["HTTP_USER_AGENT"])) ? true : false;

    if ($ie6 || $ie7 || $ie8) {
        // Do fallback stuff that old browsers can do here
        echo "You are using IE";
    } else {
        // Do stuff that real browsers can handle here
    }
?>

11
我很喜欢你用“真正的浏览器”来形容IE以外的浏览器。 - asprin
4
附注:ereg() 该函数自 PHP 5.3.0 版本起已被弃用。强烈不建议使用该功能。建议使用 preg_match() 函数作为替代方案。 - Funk Forty Niner
1
ereg已过时,在这种情况下,preg_match不是一个好的替代方案。使用类似于strpos的东西,它比正则表达式引擎要快得多。如果不需要正则表达式,则永远不要使用它。这会更好:$ie_user = !!preg_match('/MSIE (6|7|8)/', $_SERVER['HTTP_USER_AGENT']); - Justin

1

这个PHP函数运行得非常好。但是我不知道如何让PHP区分不同版本的“MSIE”。

    <?php 
    if ( strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') ){
        header( 'Location: http://www.domain.com' ) ;
    }
?>

非常感谢

4
这不会检测到IE11。http://msdn.microsoft.com/zh-cn/library/ie/bg182625(v=vs.85).aspx - redburn

-1

PHP 没有可靠的方法来知道或关心哪个浏览器在调用它。按设计,服务器端语言在执行代码之前没有考虑使用什么浏览器的理由。$_SERVER['HTTP_USER_AGENT'] 最多只是一个 shim,并且变化如此频繁,以至于您很快就会遇到问题。

作为 Web 开发人员,您唯一的目标应该是编写跨浏览器兼容的 CSS 和 JS 代码,或者使用条件 <!--[if IE 8]><![endif]--> shim,不过这已经被 IE11 放弃了...

在 JS 中,您需要在调用函数之前检查其是否存在,或者确定支持它的 JS 引擎是否在您的浏览器目标范围内可用。

话虽如此,确实有一些库试图解密 $_SERVER['HTTP_USER_AGENT'],但信息源本身就存在缺陷,因此从您尝试使用它的那一刻起,该库就是无用的。

这里是一些跨浏览器的 CSS:

.someClass{
    -webkit-box-shadow: 0 0 5px black;
    -moz-box-shadow:    0 0 5px black;
    box-shadow:         0 0 5px black;

    -webkit-transform: rotate(45deg);
    -moz-transform: rotate(45deg);
    -ms-transform: rotate(45deg);
    -o-transform: rotate(45deg);
    transform: rotate(45deg);

    -webkit-border-radius: 4px;
    -moz-border-radius: 4px;
    border-radius: 4px;

    /* IE supports nothing above? Too bad, it will ignore it */
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接