PHP - get_browser()结果

时间:2013-06-30 16:05:32

标签: php browser get

我正在使用get_browser()功能,我安装了来自http://tempdownloads.browserscap.com/的最新php_browscap.ini文件,更新了我的 php.ini 文件以反映新的位置。

这是我从PHP网站收集的简单代码:

<?php
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo "<br>";
$browser = get_browser(null, true);
print_r($browser);
?>

结果如下:

Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0

Array ( [browser_name_regex] => �^mozilla/5\.0 \(.*windows nt 6\.1.*wow64.*\).*gecko/.*firefox/21\..*$� [browser_name_pattern] => Mozilla/5.0 (*Windows NT 6.1*WOW64*)*Gecko/*Firefox/21.* [parent] => Firefox 21.0 [platform] => Win7 [platform_version] => 6.1 [win32] => [win64] => 1 [comment] => Firefox 21.0 [browser] => Firefox [version] => 21.0 [majorver] => 21 [minorver] => 0 [beta] => 1 [frames] => 1 [iframes] => 1 [tables] => 1 [cookies] => 1 [javascript] => 1 [javaapplets] => 1 [cssversion] => 3 [alpha] => [win16] => [backgroundsounds] => [vbscript] => [activexcontrols] => [ismobiledevice] => [issyndicationreader] => [crawler] => [aolversion] => 0 ) 

我在 [browser_name_regex] 部分看到了一个奇怪的字符。
这是预期的吗?

另外,我

2 个答案:

答案 0 :(得分:2)

虽然没有预料到,但是这是允许的。我get_browser()函数的输出为[browser_name_regex] => §^.*$§。它只有两个段落而不是强制斜杠/^.*$/

说明:

  

除反斜杠(\)和空字节外,分隔符可以是任何非字母数字,非空白ASCII字符。 (link

     

你看到的只是一个用分隔符包裹的pcre模式,它是\ xA7。要得到   匹配你的浏览器需要一个可以通过链接下载的browscap.ini   doc页面。 (link

答案 1 :(得分:0)

@Stano,谢谢你的解释。根据您的答案以及https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=612364中发现的更详细解释错误的信息,我创建了一些代码来解决问题。

Getting illegal characters in get_browser() method run in php

提出了同样的问题

我已经在这里和那里发布了我的答案。

代码:

if (function_exists('get_browser') && ini_get('browscap')) {
    $browser_info = get_browser(null, true);
    if (function_exists('mb_convert_encoding')) $browser_info['browser_name_regex'] = mb_convert_encoding($browser_info['browser_name_regex'], "UTF-8", "ISO-8859-1");
    print_r($browser_info);
}