7

要件:ブラウザからユーザーエージェント文字列を解析することにより、ユーザーが使用している電話を見つける(PHPで)。ノキア1100、サムスンD900。

電話ベンダーとモデルの十分なデータベースを備えた優れたライブラリはありますか?

私が見つけたいくつかの解決策は、同じことについてあなたの意見が必要です:

i)ハンドセット検出: https://www.handsetdetection.com - 有料サブスクリプション

ii) WURFL - http://wurfl.sourceforge.net/

iii)独自の解決策- 電話メーカーとモデルの小さなデータベースがありますが、ユーザー エージェント文字列の形式はメーカー間で一貫していないため、コードにユーザー エージェント文字列のカスタム チェックを追加して、データベースに対して /fuzzy 一致に一致させる必要があります。

アップデート:

iOS、Android、Blackberry、WURFL などの標準的なユーザー エージェントを、symbian、j2me、bada などの他の携帯電話のフォールバック メカニズムとして節約するために、正規表現を組み合わせたオーダーメイドのソリューションを作成しました。

WURFL は、コア コードベースの設定として既に存在するデータベース/キャッシュ (MySql、memcached、mongodb など) を追加した後、うまく機能します。新しくリリースされた携帯電話の仕様で。

4

8 に答える 8

10

まず、KISS (Keep It Simple, Stupid) というのは、理由があって広く使われている表現です。まず、ビジネス ニーズを再確認し、実際に必要なデバイス情報とその使用目的を確認します。クライアントが使用しているレンダリング エンジンを確認するだけでよいのではないでしょうか。

次に、解析時間を考慮する必要があります。サイトでWURFLなどを使用してその XML を解析することになった場合、デバイス情報を確認するときに 400,000 行以上の XML を解析する必要があります。もちろん、XML をローカルのインデックス付きデータベースに配置することもできますが、その場合、更新された XML のデータをデータベースと同期するためのメンテナンス スクリプトも必要になります。

3 つ目 (最初にするべきではないでしょうか?) は、ソリューションの費用対効果を検討することです。サイトでお金を稼いでいる場合は、パートナーに責任を任せるのが賢明かもしれません. handsetdetection.comのようなホスティング サービスは、それほど恐ろしいコストではなく、大量のトラフィックを配信できるようです。もう 1 つの利点は、独自のリポジトリを維持する責任があり、サービスが不十分な場合に顧客を失う可能性があることです。理論的には、オープンソース コミュニティは 4 か月の休暇を取ることができ、その期間中は魂が維持されません (心配する必要はないと思います ;-)

あなたの正確なニーズがわからないので、次のように優先順位を付けます。

  1. できるだけ単純なソリューションを使用してください。つまり、モバイル ブラウザの検出のソリューションを使用してください。
  2. WURFL のように、オープンソースに移行します。私はオープンソース ソリューションが大好きです :-)
  3. ビジネスで安定性とデータ品質の保証が必要な場合は、専門家に任せるべきです ;-)
于 2012-03-11T15:36:10.923 に答える
4
<?php
// Include the browser php file that contains the class
require_once 'Browser1.php';

$browserData = new Browser();
// Output for testing purposes browser info
echo $browserData;
/* My laptop:
Browser Name:Firefox
Browser Version:10.0.2
Browser User Agent String:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Platform:Windows
*/

$browserMajorVersion = intval($browserData->getVersion());
$browserName = $browserData->getBrowser();
$css = 3;
if ($browserName == 'Internet Explorer' || $browserName == 'Opera') $css = 2;
echo '<p>Css version supported:'.$css.'</p>';
// PHP Class file
<?php
class Browser {
private $_agent = '';
private $_browser_name = '';
private $_version = '';
private $_platform = '';
private $_os = '';
private $_is_aol = false;
private $_is_mobile = false;
private $_is_robot = false;
private $_aol_version = '';

const BROWSER_UNKNOWN = 'unknown';
const VERSION_UNKNOWN = 'unknown';

const BROWSER_OPERA = 'Opera';                            // http://www.opera.com/
const BROWSER_OPERA_MINI = 'Opera Mini';                  // http://www.opera.com/mini/
const BROWSER_WEBTV = 'WebTV';                            // http://www.webtv.net/pc/
const BROWSER_IE = 'Internet Explorer';                   // http://www.microsoft.com/ie/
const BROWSER_POCKET_IE = 'Pocket Internet Explorer';     // http://en.wikipedia.org/wiki/Internet_Explorer_Mobile
const BROWSER_KONQUEROR = 'Konqueror';                    // http://www.konqueror.org/
const BROWSER_ICAB = 'iCab';                              // http://www.icab.de/
const BROWSER_OMNIWEB = 'OmniWeb';                        // http://www.omnigroup.com/applications/omniweb/
const BROWSER_FIREBIRD = 'Firebird';                      // http://www.ibphoenix.com/
const BROWSER_FIREFOX = 'Firefox';                        // http://www.mozilla.com/en-US/firefox/firefox.html
const BROWSER_ICEWEASEL = 'Iceweasel';                    // http://www.geticeweasel.org/
const BROWSER_SHIRETOKO = 'Shiretoko';                    // http://wiki.mozilla.org/Projects/shiretoko
const BROWSER_MOZILLA = 'Mozilla';                        // http://www.mozilla.com/en-US/
const BROWSER_AMAYA = 'Amaya';                            // http://www.w3.org/Amaya/
const BROWSER_LYNX = 'Lynx';                              // http://en.wikipedia.org/wiki/Lynx
const BROWSER_SAFARI = 'Safari';                          // http://apple.com
const BROWSER_IPHONE = 'iPhone';                          // http://apple.com
const BROWSER_IPOD = 'iPod';                              // http://apple.com
const BROWSER_IPAD = 'iPad';                              // http://apple.com
const BROWSER_CHROME = 'Chrome';                          // http://www.google.com/chrome
const BROWSER_ANDROID = 'Android';                        // http://www.android.com/
const BROWSER_GOOGLEBOT = 'GoogleBot';                    // http://en.wikipedia.org/wiki/Googlebot
const BROWSER_SLURP = 'Yahoo! Slurp';                     // http://en.wikipedia.org/wiki/Yahoo!_Slurp
const BROWSER_W3CVALIDATOR = 'W3C Validator';             // http://validator.w3.org/
const BROWSER_BLACKBERRY = 'BlackBerry';                  // http://www.blackberry.com/
const BROWSER_ICECAT = 'IceCat';                          // http://en.wikipedia.org/wiki/GNU_IceCat
const BROWSER_NOKIA_S60 = 'Nokia S60 OSS Browser';        // http://en.wikipedia.org/wiki/Web_Browser_for_S60
const BROWSER_NOKIA = 'Nokia Browser';                    // * all other WAP-based browsers on the Nokia Platform
const BROWSER_MSN = 'MSN Browser';                        // http://explorer.msn.com/
const BROWSER_MSNBOT = 'MSN Bot';                         // http://search.msn.com/msnbot.htm
                                                          // http://en.wikipedia.org/wiki/Msnbot  (used for Bing as well)

const BROWSER_NETSCAPE_NAVIGATOR = 'Netscape Navigator';  // http://browser.netscape.com/ (DEPRECATED)
const BROWSER_GALEON = 'Galeon';                          // http://galeon.sourceforge.net/ (DEPRECATED)
const BROWSER_NETPOSITIVE = 'NetPositive';                // http://en.wikipedia.org/wiki/NetPositive (DEPRECATED)
const BROWSER_PHOENIX = 'Phoenix';                        // http://en.wikipedia.org/wiki/History_of_Mozilla_Firefox (DEPRECATED)

const PLATFORM_UNKNOWN = 'unknown';
const PLATFORM_WINDOWS = 'Windows';
const PLATFORM_WINDOWS_CE = 'Windows CE';
const PLATFORM_APPLE = 'Apple';
const PLATFORM_LINUX = 'Linux';
const PLATFORM_OS2 = 'OS/2';
const PLATFORM_BEOS = 'BeOS';
const PLATFORM_IPHONE = 'iPhone';
const PLATFORM_IPOD = 'iPod';
const PLATFORM_IPAD = 'iPad';
const PLATFORM_BLACKBERRY = 'BlackBerry';
const PLATFORM_NOKIA = 'Nokia';
const PLATFORM_FREEBSD = 'FreeBSD';
const PLATFORM_OPENBSD = 'OpenBSD';
const PLATFORM_NETBSD = 'NetBSD';
const PLATFORM_SUNOS = 'SunOS';
const PLATFORM_OPENSOLARIS = 'OpenSolaris';
const PLATFORM_ANDROID = 'Android';

const OPERATING_SYSTEM_UNKNOWN = 'unknown';

public function Browser($useragent="") {
    $this->reset();
    if( $useragent != "" ) {
        $this->setUserAgent($useragent);
    }
    else {
        $this->determine();
    }
}

/**
* Reset all properties
*/
public function reset() {
    $this->_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : "";
    $this->_browser_name = self::BROWSER_UNKNOWN;
    $this->_version = self::VERSION_UNKNOWN;
    $this->_platform = self::PLATFORM_UNKNOWN;
    $this->_os = self::OPERATING_SYSTEM_UNKNOWN;
    $this->_is_aol = false;
    $this->_is_mobile = false;
    $this->_is_robot = false;
    $this->_aol_version = self::VERSION_UNKNOWN;
}

function isBrowser($browserName) { return( 0 == strcasecmp($this->_browser_name, trim($browserName))); }

public function getBrowser() { return $this->_browser_name; }
public function setBrowser($browser) { return $this->_browser_name = $browser; }
public function getPlatform() { return $this->_platform; }
public function setPlatform($platform) { return $this->_platform = $platform; }
public function getVersion() { return $this->_version; }
public function setVersion($version) { $this->_version = preg_replace('/[^0-9,.,a-z,A-Z-]/','',$version); }
public function getAolVersion() { return $this->_aol_version; }
public function setAolVersion($version) { $this->_aol_version = preg_replace('/[^0-9,.,a-z,A-Z]/','',$version); }
public function isAol() { return $this->_is_aol; }
public function isMobile() { return $this->_is_mobile; }
public function isRobot() { return $this->_is_robot; }
public function setAol($isAol) { $this->_is_aol = $isAol; }
protected function setMobile($value=true) { $this->_is_mobile = $value; }
protected function setRobot($value=true) { $this->_is_robot = $value; }
public function getUserAgent() { return $this->_agent; }
public function setUserAgent($agent_string) {
    $this->reset();
    $this->_agent = $agent_string;
    $this->determine();
}
public function isChromeFrame() {
    return( strpos($this->_agent,"chromeframe") !== false );
}
public function __toString() {
    return "<strong>Browser Name:</strong>{$this->getBrowser()}<br/>\n" .
           "<strong>Browser Version:</strong>{$this->getVersion()}<br/>\n" .
           "<strong>Browser User Agent String:</strong>{$this->getUserAgent()}<br/>\n" .
           "<strong>Platform:</strong>{$this->getPlatform()}<br/>";
}
protected function determine() {
    $this->checkPlatform();
    $this->checkBrowsers();
    $this->checkForAol();
}
 protected function checkBrowsers() {
    return (
        $this->checkBrowserWebTv() ||
        $this->checkBrowserInternetExplorer() ||
        $this->checkBrowserOpera() ||
        $this->checkBrowserGaleon() ||
        $this->checkBrowserNetscapeNavigator9Plus() ||
        $this->checkBrowserFirefox() ||
        $this->checkBrowserChrome() ||
        $this->checkBrowserOmniWeb() ||

        // common mobile
        $this->checkBrowserAndroid() ||
        $this->checkBrowseriPad() ||
        $this->checkBrowseriPod() ||
        $this->checkBrowseriPhone() ||
        $this->checkBrowserBlackBerry() ||
        $this->checkBrowserNokia() ||

        // common bots
        $this->checkBrowserGoogleBot() ||
        $this->checkBrowserMSNBot() ||
        $this->checkBrowserSlurp() ||

        // WebKit base check (post mobile and others)
        $this->checkBrowserSafari() ||

        // everyone else
        $this->checkBrowserNetPositive() ||
        $this->checkBrowserFirebird() ||
        $this->checkBrowserKonqueror() ||
        $this->checkBrowserIcab() ||
        $this->checkBrowserPhoenix() ||
        $this->checkBrowserAmaya() ||
        $this->checkBrowserLynx() ||
        $this->checkBrowserShiretoko() ||
        $this->checkBrowserIceCat() ||
        $this->checkBrowserW3CValidator() ||
        $this->checkBrowserMozilla() /* Mozilla is such an open standard that you must check it last */
    );
}
protected function checkBrowserBlackBerry() {
    if( stripos($this->_agent,'blackberry') !== false ) {
        $aresult = explode("/",stristr($this->_agent,"BlackBerry"));
        $aversion = explode(' ',$aresult[1]);
        $this->setVersion($aversion[0]);
        $this->_browser_name = self::BROWSER_BLACKBERRY;
        $this->setMobile(true);
        return true;
    }
    return false;
}
protected function checkForAol() {
    $this->setAol(false);
    $this->setAolVersion(self::VERSION_UNKNOWN);

    if( stripos($this->_agent,'aol') !== false ) {
        $aversion = explode(' ',stristr($this->_agent, 'AOL'));
        $this->setAol(true);
        $this->setAolVersion(preg_replace('/[^0-9\.a-z]/i', '', $aversion[1]));
        return true;
    }
    return false;
}
protected function checkBrowserGoogleBot() {
    if( stripos($this->_agent,'googlebot') !== false ) {
        $aresult = explode('/',stristr($this->_agent,'googlebot'));
        $aversion = explode(' ',$aresult[1]);
        $this->setVersion(str_replace(';','',$aversion[0]));
        $this->_browser_name = self::BROWSER_GOOGLEBOT;
        $this->setRobot(true);
        return true;
    }
    return false;
}
protected function checkBrowserMSNBot() {
    if( stripos($this->_agent,"msnbot") !== false ) {
        $aresult = explode("/",stristr($this->_agent,"msnbot"));
        $aversion = explode(" ",$aresult[1]);
        $this->setVersion(str_replace(";","",$aversion[0]));
        $this->_browser_name = self::BROWSER_MSNBOT;
        $this->setRobot(true);
        return true;
    }
    return false;
}
protected function checkBrowserW3CValidator() {
    if( stripos($this->_agent,'W3C-checklink') !== false ) {
        $aresult = explode('/',stristr($this->_agent,'W3C-checklink'));
        $aversion = explode(' ',$aresult[1]);
        $this->setVersion($aversion[0]);
        $this->_browser_name = self::BROWSER_W3CVALIDATOR;
        return true;
    }
    else if( stripos($this->_agent,'W3C_Validator') !== false ) {
        // Some of the Validator versions do not delineate w/ a slash - add it back in
        $ua = str_replace("W3C_Validator ", "W3C_Validator/", $this->_agent);
        $aresult = explode('/',stristr($ua,'W3C_Validator'));
        $aversion = explode(' ',$aresult[1]);
        $this->setVersion($aversion[0]);
        $this->_browser_name = self::BROWSER_W3CVALIDATOR;
        return true;
    }
    return false;
}
protected function checkBrowserSlurp() {
    if( stripos($this->_agent,'slurp') !== false ) {
        $aresult = explode('/',stristr($this->_agent,'Slurp'));
        $aversion = explode(' ',$aresult[1]);
        $this->setVersion($aversion[0]);
        $this->_browser_name = self::BROWSER_SLURP;
        $this->setRobot(true);
        $this->setMobile(false);
        return true;
    }
    return false;
}
protected function checkBrowserInternetExplorer() {

    if( stripos($this->_agent,'microsoft internet explorer') !== false ) {
        $this->setBrowser(self::BROWSER_IE);
        $this->setVersion('1.0');
        $aresult = stristr($this->_agent, '/');
        if( preg_match('/308|425|426|474|0b1/i', $aresult) ) {
            $this->setVersion('1.5');
        }
        return true;
    }
    else if( stripos($this->_agent,'msie') !== false && stripos($this->_agent,'opera') === false ) {
        if( stripos($this->_agent,'msnb') !== false ) {
            $aresult = explode(' ',stristr(str_replace(';','; ',$this->_agent),'MSN'));
            $this->setBrowser( self::BROWSER_MSN );
            $this->setVersion(str_replace(array('(',')',';'),'',$aresult[1]));
            return true;
        }
        $aresult = explode(' ',stristr(str_replace(';','; ',$this->_agent),'msie'));
        $this->setBrowser( self::BROWSER_IE );
        $this->setVersion(str_replace(array('(',')',';'),'',$aresult[1]));
        return true;
    }
    else if( stripos($this->_agent,'mspie') !== false || stripos($this->_agent,'pocket') !== false ) {
        $aresult = explode(' ',stristr($this->_agent,'mspie'));
        $this->setPlatform( self::PLATFORM_WINDOWS_CE );
        $this->setBrowser( self::BROWSER_POCKET_IE );
        $this->setMobile(true);

        if( stripos($this->_agent,'mspie') !== false ) {
            $this->setVersion($aresult[1]);
        }
        else {
            $aversion = explode('/',$this->_agent);
            $this->setVersion($aversion[1]);
        }
        return true;
    }
    return false;
}
protected function checkBrowserOpera() {
    if( stripos($this->_agent,'opera mini') !== false ) {
        $resultant = stristr($this->_agent, 'opera mini');
        if( preg_match('/\//',$resultant) ) {
            $aresult = explode('/',$resultant);
            $aversion = explode(' ',$aresult[1]);
            $this->setVersion($aversion[0]);
        }
        else {
            $aversion = explode(' ',stristr($resultant,'opera mini'));
            $this->setVersion($aversion[1]);
        }
        $this->_browser_name = self::BROWSER_OPERA_MINI;
        $this->setMobile(true);
        return true;
    }
    else if( stripos($this->_agent,'opera') !== false ) {
        $resultant = stristr($this->_agent, 'opera');
        if( preg_match('/Version\/(11.*)$/',$resultant,$matches) ) {
            $this->setVersion($matches[1]);
        }
        else if( preg_match('/Version\/(10.*)$/',$resultant,$matches) ) {
            $this->setVersion($matches[1]);
        }
        else if( preg_match('/\//',$resultant) ) {
            $aresult = explode('/',str_replace("("," ",$resultant));
            $aversion = explode(' ',$aresult[1]);
            $this->setVersion($aversion[0]);
        }
        else {
            $aversion = explode(' ',stristr($resultant,'opera'));
            $this->setVersion(isset($aversion[1])?$aversion[1]:"");
        }
        $this->_browser_name = self::BROWSER_OPERA;
        return true;
    }
    return false;
}
protected function checkBrowserChrome() {
    if( stripos($this->_agent,'Chrome') !== false ) {
        $aresult = explode('/',stristr($this->_agent,'Chrome'));
        $aversion = explode(' ',$aresult[1]);
        $this->setVersion($aversion[0]);
        $this->setBrowser(self::BROWSER_CHROME);
        return true;
    }
    return false;
}
protected function checkBrowserWebTv() {
    if( stripos($this->_agent,'webtv') !== false ) {
        $aresult = explode('/',stristr($this->_agent,'webtv'));
        $aversion = explode(' ',$aresult[1]);
        $this->setVersion($aversion[0]);
        $this->setBrowser(self::BROWSER_WEBTV);
        return true;
    }
    return false;
}
protected function checkBrowserNetPositive() {
    if( stripos($this->_agent,'NetPositive') !== false ) {
        $aresult = explode('/',stristr($this->_agent,'NetPositive'));
        $aversion = explode(' ',$aresult[1]);
        $this->setVersion(str_replace(array('(',')',';'),'',$aversion[0]));
        $this->setBrowser(self::BROWSER_NETPOSITIVE);
        return true;
    }
    return false;
}
protected function checkBrowserGaleon() {
    if( stripos($this->_agent,'galeon') !== false ) {
        $aresult = explode(' ',stristr($this->_agent,'galeon'));
        $aversion = explode('/',$aresult[0]);
        $this->setVersion($aversion[1]);
        $this->setBrowser(self::BROWSER_GALEON);
        return true;
    }
    return false;
}
protected function checkBrowserKonqueror() {
    if( stripos($this->_agent,'Konqueror') !== false ) {
        $aresult = explode(' ',stristr($this->_agent,'Konqueror'));
        $aversion = explode('/',$aresult[0]);
        $this->setVersion($aversion[1]);
        $this->setBrowser(self::BROWSER_KONQUEROR);
        return true;
    }
    return false;
}
protected function checkBrowserIcab() {
    if( stripos($this->_agent,'icab') !== false ) {
        $aversion = explode(' ',stristr(str_replace('/',' ',$this->_agent),'icab'));
        $this->setVersion($aversion[1]);
        $this->setBrowser(self::BROWSER_ICAB);
        return true;
    }
    return false;
}
protected function checkBrowserOmniWeb() {
    if( stripos($this->_agent,'omniweb') !== false ) {
        $aresult = explode('/',stristr($this->_agent,'omniweb'));
        $aversion = explode(' ',isset($aresult[1])?$aresult[1]:"");
        $this->setVersion($aversion[0]);
        $this->setBrowser(self::BROWSER_OMNIWEB);
        return true;
    }
    return false;
}
protected function checkBrowserPhoenix() {
    if( stripos($this->_agent,'Phoenix') !== false ) {
        $aversion = explode('/',stristr($this->_agent,'Phoenix'));
        $this->setVersion($aversion[1]);
        $this->setBrowser(self::BROWSER_PHOENIX);
        return true;
    }
    return false;
}
protected function checkBrowserFirebird() {
    if( stripos($this->_agent,'Firebird') !== false ) {
        $aversion = explode('/',stristr($this->_agent,'Firebird'));
        $this->setVersion($aversion[1]);
        $this->setBrowser(self::BROWSER_FIREBIRD);
        return true;
    }
    return false;
}
protected function checkBrowserNetscapeNavigator9Plus() {
    if( stripos($this->_agent,'Firefox') !== false && preg_match('/Navigator\/([^ ]*)/i',$this->_agent,$matches) ) {
        $this->setVersion($matches[1]);
        $this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR);
        return true;
    }
    else if( stripos($this->_agent,'Firefox') === false && preg_match('/Netscape6?\/([^ ]*)/i',$this->_agent,$matches) ) {
        $this->setVersion($matches[1]);
        $this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR);
        return true;
    }
    return false;
}
protected function checkBrowserShiretoko() {
    if( stripos($this->_agent,'Mozilla') !== false && preg_match('/Shiretoko\/([^ ]*)/i',$this->_agent,$matches) ) {
        $this->setVersion($matches[1]);
        $this->setBrowser(self::BROWSER_SHIRETOKO);
        return true;
    }
    return false;
}
protected function checkBrowserIceCat() {
    if( stripos($this->_agent,'Mozilla') !== false && preg_match('/IceCat\/([^ ]*)/i',$this->_agent,$matches) ) {
        $this->setVersion($matches[1]);
        $this->setBrowser(self::BROWSER_ICECAT);
        return true;
    }
    return false;
}
protected function checkBrowserNokia() {
    if( preg_match("/Nokia([^\/]+)\/([^ SP]+)/i",$this->_agent,$matches) ) {
        $this->setVersion($matches[2]);
        if( stripos($this->_agent,'Series60') !== false || strpos($this->_agent,'S60') !== false ) {
            $this->setBrowser(self::BROWSER_NOKIA_S60);
        }
        else {
            $this->setBrowser( self::BROWSER_NOKIA );
        }
        $this->setMobile(true);
        return true;
    }
    return false;
}
protected function checkBrowserFirefox() {
    if( stripos($this->_agent,'safari') === false ) {
        if( preg_match("/Firefox[\/ \(]([^ ;\)]+)/i",$this->_agent,$matches) ) {
            $this->setVersion($matches[1]);
            $this->setBrowser(self::BROWSER_FIREFOX);
            return true;
        }
        else if( preg_match("/Firefox$/i",$this->_agent,$matches) ) {
            $this->setVersion("");
            $this->setBrowser(self::BROWSER_FIREFOX);
            return true;
        }
    }
    return false;
}
protected function checkBrowserIceweasel() {
    if( stripos($this->_agent,'Iceweasel') !== false ) {
        $aresult = explode('/',stristr($this->_agent,'Iceweasel'));
        $aversion = explode(' ',$aresult[1]);
        $this->setVersion($aversion[0]);
        $this->setBrowser(self::BROWSER_ICEWEASEL);
        return true;
    }
    return false;
}
protected function checkBrowserMozilla() {
    if( stripos($this->_agent,'mozilla') !== false  && preg_match('/rv:[0-9].[0-9][a-b]?/i',$this->_agent) && stripos($this->_agent,'netscape') === false) {
        $aversion = explode(' ',stristr($this->_agent,'rv:'));
        preg_match('/rv:[0-9].[0-9][a-b]?/i',$this->_agent,$aversion);
        $this->setVersion(str_replace('rv:','',$aversion[0]));
        $this->setBrowser(self::BROWSER_MOZILLA);
        return true;
    }
    else if( stripos($this->_agent,'mozilla') !== false && preg_match('/rv:[0-9]\.[0-9]/i',$this->_agent) && stripos($this->_agent,'netscape') === false ) {
        $aversion = explode('',stristr($this->_agent,'rv:'));
        $this->setVersion(str_replace('rv:','',$aversion[0]));
        $this->setBrowser(self::BROWSER_MOZILLA);
        return true;
    }
    else if( stripos($this->_agent,'mozilla') !== false  && preg_match('/mozilla\/([^ ]*)/i',$this->_agent,$matches) && stripos($this->_agent,'netscape') === false ) {
        $this->setVersion($matches[1]);
        $this->setBrowser(self::BROWSER_MOZILLA);
        return true;
    }
    return false;
}
protected function checkBrowserLynx() {
    if( stripos($this->_agent,'lynx') !== false ) {
        $aresult = explode('/',stristr($this->_agent,'Lynx'));
        $aversion = explode(' ',(isset($aresult[1])?$aresult[1]:""));
        $this->setVersion($aversion[0]);
        $this->setBrowser(self::BROWSER_LYNX);
        return true;
    }
    return false;
}
protected function checkBrowserAmaya() {
    if( stripos($this->_agent,'amaya') !== false ) {
        $aresult = explode('/',stristr($this->_agent,'Amaya'));
        $aversion = explode(' ',$aresult[1]);
        $this->setVersion($aversion[0]);
        $this->setBrowser(self::BROWSER_AMAYA);
        return true;
    }
    return false;
}

protected function checkBrowserSafari() {
    if( stripos($this->_agent,'Safari') !== false && stripos($this->_agent,'iPhone') === false && stripos($this->_agent,'iPod') === false ) {
        $aresult = explode('/',stristr($this->_agent,'Version'));
        if( isset($aresult[1]) ) {
            $aversion = explode(' ',$aresult[1]);
            $this->setVersion($aversion[0]);
        }
        else {
            $this->setVersion(self::VERSION_UNKNOWN);
        }
        $this->setBrowser(self::BROWSER_SAFARI);
        return true;
    }
    return false;
}

protected function checkBrowseriPhone() {
    if( stripos($this->_agent,'iPhone') !== false ) {
        $aresult = explode('/',stristr($this->_agent,'Version'));
        if( isset($aresult[1]) ) {
            $aversion = explode(' ',$aresult[1]);
            $this->setVersion($aversion[0]);
        }
        else {
            $this->setVersion(self::VERSION_UNKNOWN);
        }
        $this->setMobile(true);
        $this->setBrowser(self::BROWSER_IPHONE);
        return true;
    }
    return false;
}
protected function checkBrowseriPad() {
    if( stripos($this->_agent,'iPad') !== false ) {
        $aresult = explode('/',stristr($this->_agent,'Version'));
        if( isset($aresult[1]) ) {
            $aversion = explode(' ',$aresult[1]);
            $this->setVersion($aversion[0]);
        }
        else {
            $this->setVersion(self::VERSION_UNKNOWN);
        }
        $this->setMobile(true);
        $this->setBrowser(self::BROWSER_IPAD);
        return true;
    }
    return false;
}
protected function checkBrowseriPod() {
    if( stripos($this->_agent,'iPod') !== false ) {
        $aresult = explode('/',stristr($this->_agent,'Version'));
        if( isset($aresult[1]) ) {
            $aversion = explode(' ',$aresult[1]);
            $this->setVersion($aversion[0]);
        }
        else {
            $this->setVersion(self::VERSION_UNKNOWN);
        }
        $this->setMobile(true);
        $this->setBrowser(self::BROWSER_IPOD);
        return true;
    }
    return false;
}

protected function checkBrowserAndroid() {
    if( stripos($this->_agent,'Android') !== false ) {
        $aresult = explode(' ',stristr($this->_agent,'Android'));
        if( isset($aresult[1]) ) {
            $aversion = explode(' ',$aresult[1]);
            $this->setVersion($aversion[0]);
        }
        else {
            $this->setVersion(self::VERSION_UNKNOWN);
        }
        $this->setMobile(true);
        $this->setBrowser(self::BROWSER_ANDROID);
        return true;
    }
    return false;
}
protected function checkPlatform() {
    if( stripos($this->_agent, 'windows') !== false ) {
        $this->_platform = self::PLATFORM_WINDOWS;
    }
    else if( stripos($this->_agent, 'iPad') !== false ) {
        $this->_platform = self::PLATFORM_IPAD;
    }
    else if( stripos($this->_agent, 'iPod') !== false ) {
        $this->_platform = self::PLATFORM_IPOD;
    }
    else if( stripos($this->_agent, 'iPhone') !== false ) {
        $this->_platform = self::PLATFORM_IPHONE;
    }
    elseif( stripos($this->_agent, 'mac') !== false ) {
        $this->_platform = self::PLATFORM_APPLE;
    }
    elseif( stripos($this->_agent, 'android') !== false ) {
        $this->_platform = self::PLATFORM_ANDROID;
    }
    elseif( stripos($this->_agent, 'linux') !== false ) {
        $this->_platform = self::PLATFORM_LINUX;
    }
    else if( stripos($this->_agent, 'Nokia') !== false ) {
        $this->_platform = self::PLATFORM_NOKIA;
    }
    else if( stripos($this->_agent, 'BlackBerry') !== false ) {
        $this->_platform = self::PLATFORM_BLACKBERRY;
    }
    elseif( stripos($this->_agent,'FreeBSD') !== false ) {
        $this->_platform = self::PLATFORM_FREEBSD;
    }
    elseif( stripos($this->_agent,'OpenBSD') !== false ) {
        $this->_platform = self::PLATFORM_OPENBSD;
    }
    elseif( stripos($this->_agent,'NetBSD') !== false ) {
        $this->_platform = self::PLATFORM_NETBSD;
    }
    elseif( stripos($this->_agent, 'OpenSolaris') !== false ) {
        $this->_platform = self::PLATFORM_OPENSOLARIS;
    }
    elseif( stripos($this->_agent, 'SunOS') !== false ) {
        $this->_platform = self::PLATFORM_SUNOS;
    }
    elseif( stripos($this->_agent, 'OS\/2') !== false ) {
        $this->_platform = self::PLATFORM_OS2;
    }
    elseif( stripos($this->_agent, 'BeOS') !== false ) {
        $this->_platform = self::PLATFORM_BEOS;
    }
    elseif( stripos($this->_agent, 'win') !== false ) {
        $this->_platform = self::PLATFORM_WINDOWS;
    }

}
}
?>
于 2012-03-11T01:40:00.387 に答える
2

WURFL はここですでに数回言及されていますが、新しい WURFL クラウド サービスを確認する必要があります。これは WURFL API のホストされたバージョンであり、WURFL チームによって維持され、ニーズに合った無料プランが含まれています。

以下は、PHP WURFL Cloud Client を使用した簡単な PHP の例です。

<?php
require_once '../Client/Client.php';
$config = new WurflCloud_Client_Config();  
$config->api_key = 'xxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';   
$client = new WurflCloud_Client_Client($config);  
$client->detectDevice();
$brand = $client->getDeviceCapability('brand_name');
$model = $client->getDeviceCapability('model_name');
if ($client->getDeviceCapability('ux_full_desktop')) {  
    echo "This is a desktop web browser";  
} else {  
    echo "This is a $brand $model";
}

入門ガイドWURFL Cloud ページを必ずチェックしてください。

于 2012-03-13T01:12:52.480 に答える
0

これは有望に見え、検出コードが必要な言語を選択できます:PHP、JSまたはApache、Nginx ...ただし、いつものようにテストする必要があります;)http://detectmobilebrowsers.com

于 2012-03-08T18:09:48.677 に答える
0

最近、同様の問題を解決しようとしましたが、これにはオープンソースまたは既製のソリューションを使用する方がはるかに優れています。コードを最新の状態に保つための戦いになるなどです。個人的には無料版を試してみます。あなたが必要とするものはそれに固執します。

if( strstr($_SERVER['HTTP_USER_AGENT'],'Android') || strstr($_SERVER['HTTP_USER_AGENT'],'webOS') || strstr($_SERVER['HTTP_USER_AGENT'],' iPhone') || strstr($_SERVER['HTTP_USER_AGENT'],'iPod') ){ //モバイル ユーザー }

OS だけを知りたい場合は、最も人気のある OS を検出します。次に、必要に応じて、nokia などの他のユーザーを追加します。

http://www.concrete5.org/community/forums/customizing_c5/mobile-version/はより完全なリストのようです

お役に立てれば。

于 2012-03-08T17:47:03.197 に答える
0

これを実装するのは難しくありません。http://detectmobilebrowsers.mobi/#download を確認してください

より多くのデータが必要な場合は、まず、ウェブサイトのようなモバイル分析を作成する予定がない限り、本当に必要かどうかを確認してください。理由は次のとおりです。

モバイルには次のものがあります。

  • HTML5/CSS3/Javascript を処理し、場合によってはフラッシュを処理するスマートフォン

  • タブレット、上記と同じようにサポートしますが、画面が大きくなり、
    インターフェースの可能性が広がります

  • ミディアム エンドの携帯電話、基本的なインターネットへのアクセス、Facebook、Twitter などに接続するためのいくつかのアプリがありますが、完全な機能を備えたブラウザではありません。

  • ローエンドの携帯電話、WAP ブラウザを搭載、インターネット接続が非常に遅い

したがって、この 4 つの異なるグループにそれらを分離できれば、アプリケーションのニーズに十分対応できるはずです。

シンプルに保ち、やりたいことを実行するのに役立ついくつかの興味深いリンクを次に示します。

幸運を!

于 2012-03-12T13:06:52.623 に答える
0

以前、WURFL を実装したコンテンツ配信システムに取り組みました。私には問題ないようでした。問題はありませんでした。

于 2012-03-12T13:23:06.153 に答える
0

プロジェクトでこの PHP クラスを使用します。

http://code.google.com/p/mobileesp/source/browse/PHP/mdetect.php

それは非常にうまく機能します。シンプルで、DB もリモート API も巨大なファイルもありません。

于 2012-03-12T20:35:16.723 に答える