3

我正在使用该功能,并从http://tempdownloads.browserscap.com/get_browser()安装了最新文件,更新了我的php.ini文件以反映新位置。php_browscap.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]部分看到一个奇怪的字符。
这是预期的吗?

还有,我

4

2 回答 2

2

虽然不是预期的,但这是允许的。我的get_browser()函数输出是[browser_name_regex] => §^.*$§. 它只有两个段落而不是施加斜线/^.*$/

解释:

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

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

于 2013-06-30T16:49:14.567 回答
0

@Stano,感谢您的解释。根据您的回答和在https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=612364找到的信息,它更彻底地解释了这个错误,我创建了一些代码行来解决这个问题。

在 php 中运行的 get_browser() 方法中获取非法字符时提出了相同的问题

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

代码:

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);
}
于 2014-03-08T23:57:51.333 回答