如何解决检查字符串和用户代理
| 我正在尝试设置一个PHP代码段,以检查是否满足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(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 \'\';
}
,这是我用的;
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
,我看不到您的代码调用该函数,因此$ 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 \'\';
}
?>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。