我正在使用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] 部分看到了一个奇怪的字符。
这是预期的吗?
另外,我
答案 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);
}