【问题标题】:Check String and User Agent检查字符串和用户代理
【发布时间】:2011-05-25 16:08:19
【问题描述】:

我正在尝试设置一个 PHP sn-p 来检查是否满足 2 个条件,如果满足,它会回显一些文本。条件是:

  1. 查询字符串等于某个值。
  2. 浏览器是 Firefox。

它正在正确检查查询字符串,但它似乎不适用于浏览器(用户代理)。见下文:

<?php

function get_user_browser()
{
    $u_agent = $_SERVER['HTTP_USER_AGENT'];
    $ub = '';
    if(preg_match('/Firefox/i',$u_agent))
    {
        $ub = "firefox";
    }
    else
    {
        $ub = "other";
    }

} 

if (isset($_GET['print']) && $_GET['print'] != "" && $ub = 'firefox') 
{
    $pg = $_GET['print'];
    if (!file_exists('1')) 
    {
        echo '<b>It worked!</b>';
    }
}
else 
{
    echo '';
}

?> 

任何帮助将不胜感激。

【问题讨论】:

  • if (isset($_GET['print']) && $_GET['print'] != "" && $ub = 'firefox'),你是说=还是==?跨度>

标签: php query-string user-agent


【解决方案1】:

这就是我检查这些东西的方法:

if(strlen(strstr($_SERVER['HTTP_USER_AGENT'],"Firefox")) <= 0 ){ // if not firefox

  //do something

}

并添加到您的代码中:

function get_user_browser()
{
    $u_agent = $_SERVER['HTTP_USER_AGENT'];
    $ub = '';
    if(strlen(strstr($u_agent,"Firefox")) > 0 ){ 

      $ub = 'firefox';

    }
    else {
      $ub = 'other';
    }

    return $ub;
} 

if (isset($_GET['print']) && $_GET['print'] != "" 
                          && get_user_browser() == 'firefox') 
{
    $pg = $_GET['print'];
    if (!file_exists('1')) 
    {
        echo '<b>It worked!</b>';
    }
}
else 
{
    echo '';
}

【讨论】:

  • @Neal - 酷。这将检查浏览器是否不是 Firefox。如何检查它是否是 Firefox?另外,如何将其集成到我的脚本中?
  • @Batfan 一分钟病加吧
  • @Batfan 我还修复了函数之外的 if 语句
  • "注意:如果您只想确定某个特定的针是否出现在 haystack 中,请改用更快且内存占用更少的函数 strpos()。" (来源:php.net/manual/en/function.strstr.php
【解决方案2】:

这是我使用的;

function getBrowser() 
{ 
    $u_agent = $_SERVER['HTTP_USER_AGENT']; 
    $bname = 'Unknown';
    $platform = 'Unknown';
    $version= "";

//First get the platform?
if (preg_match('/linux/i', $u_agent)) {
    $platform = 'linux';
}
elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
    $platform = 'mac';
}
elseif (preg_match('/windows|win32/i', $u_agent)) {
    $platform = 'windows';
}

// Next get the name of the useragent yes seperately and for good reason
if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent)) 
{ 
    $bname = 'Internet Explorer'; 
    $ub = "MSIE"; 
} 
elseif(preg_match('/Firefox/i',$u_agent)) 
{ 
    $bname = 'Mozilla Firefox'; 
    $ub = "Firefox"; 
} 
elseif(preg_match('/Chrome/i',$u_agent)) 
{ 
    $bname = 'Google Chrome'; 
    $ub = "Chrome"; 
} 
elseif(preg_match('/Safari/i',$u_agent)) 
{ 
    $bname = 'Apple Safari'; 
    $ub = "Safari"; 
} 
elseif(preg_match('/Opera/i',$u_agent)) 
{ 
    $bname = 'Opera'; 
    $ub = "Opera"; 
} 
elseif(preg_match('/Netscape/i',$u_agent)) 
{ 
    $bname = 'Netscape'; 
    $ub = "Netscape"; 
} 

// finally get the correct version number
$known = array('Version', $ub, 'other');
$pattern = '#(?<browser>' . join('|', $known) .
')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
if (!preg_match_all($pattern, $u_agent, $matches)) {
    // we have no matching number just continue
}

// see how many we have
$i = count($matches['browser']);
if ($i != 1) {
    //we will have two since we are not using 'other' argument yet
    //see if version is before or after the name
    if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){
        $version= $matches['version'][0];
    }
    else {
        $version= $matches['version'][1];
    }
}
else {
    $version= $matches['version'][0];
}

// check if we have a number
if ($version==null || $version=="") {$version="?";}

return array(
    'userAgent' => $u_agent,
    'name'      => $bname,
    'version'   => $version,
    'platform'  => $platform,
    'pattern'    => $pattern
);

} 

你也可以看看;

https://github.com/donatj/PhpUserAgent

【讨论】:

    【解决方案3】:

    我看不到您的代码调用该函数,因此 $ub 在您的情况下不起作用。

    <?php
    
    $u_agent = $_SERVER['HTTP_USER_AGENT'];
    $ub = 'other';
    if(preg_match('/Firefox/i',$u_agent))
    {
        $ub = "firefox";
    }
    
    if (isset($_GET['print']) && $_GET['print'] != "" && $ub == 'firefox') {
    $pg = $_GET['print'];
    if (!file_exists('1')) {
    echo '<b>It worked!</b>';
    }
    } 
    else {
    echo '';
    }
    ?> 
    

    【讨论】:

    • 我尝试了上面的代码,它仍然在所有浏览器中显示回显文本。
    • 我认为检查浏览器没有任何问题,除非您的代码在某种情况下存在问题 :) 我测试成功了。
    • 我的情况可能有问题。不过,尼尔的回答似乎奏效了。谢谢
    猜你喜欢
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 2015-12-10
    • 2010-10-29
    相关资源
    最近更新 更多