2013-06-30 47 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); 
}