2013-06-30 33 views
3

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

这里是我的简单的代码,我从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]一个奇怪的字符部分。
这是预期的吗?

此外,我

+0

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=612364这似乎符合您的问题。您使用的是哪个版本的PHP? –

回答

2

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

说明:

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

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

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); 
}