【问题标题】:How to perform Browser detection - IE (versions) in PHP [duplicate]如何执行浏览器检测-PHP中的IE(版本)[重复]
【发布时间】:2014-03-18 12:44:35
【问题描述】:

我发现这段代码可以通过 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 />';
}?>

Source

但代码不包括 IE 的可能版本。 做了这样的事情:

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

有人可以帮我解决这个问题吗?想改进代码包括支持IE版本。

【问题讨论】:

标签: php internet-explorer


【解决方案1】:

试试这个:

<?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
    }
?>

【讨论】:

  • 我喜欢你对 IE 以外的浏览器说 real browsers
  • 旁注:ereg() 自 PHP 5.3.0 起,该函数已被弃用。强烈建议不要依赖此功能。 preg_match() 是此功能的建议替代方案。
  • ereg 已弃用,但在这种情况下,preg_match 不是一个好的选择。使用strpos 之类的东西,它比正则表达式引擎快得多。如果不需要,切勿使用正则表达式。这样会更好:$ie_user = !!preg_match('/MSIE (6|7|8)/', $_SERVER['HTTP_USER_AGENT']);.
【解决方案2】:

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

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

非常感谢

【讨论】:

【解决方案3】:

没有可靠的方法让 PHP 知道也不关心哪个浏览器正在调用它。按照设计,服务器端语言没有理由在执行代码之前考虑您使用的浏览器。 $_SERVER['HTTP_USER_AGENT'] 充其量只是一个 shim,而且变化如此频繁,以至于你一定会迟早被它搞砸。

作为 Web 开发人员,您唯一的目标应该是编写 CSS 和 JS 代码,这些代码要么兼容跨浏览器,要么使用条件 &lt;!--[if IE 8]&gt;&lt;![endif]--&gt; 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 */
}

【讨论】:

    猜你喜欢
    • 2011-03-14
    • 2014-12-28
    • 2011-08-20
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    相关资源
    最近更新 更多