-1

私はこの機能を持っていますが、このエラーが発生しますDeprecated: Function eregi() is deprecated in...。に変更eregiするとpreg_match、このエラーが発生しますWarning: preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash in...

function getBrowser($userAgent) {
$browsers = array(
    'Opera' => 'Opera',
    'Mozilla Firefox'=> '(Firebird)|(Firefox)', // Use regular expressions as value to identify browser
    'Galeon' => 'Galeon',
    'Chrome'=>'Gecko',
    'MyIE'=>'MyIE',
    'Lynx' => 'Lynx',
    'Netscape' => '(Mozilla/4\.75)|(Netscape6)|(Mozilla/4\.08)|(Mozilla/4\.5)|(Mozilla/4\.6)|(Mozilla/4\.79)',
    'Konqueror'=>'Konqueror',
    'SearchBot' => '(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp/cat)|(msnbot)|(ia_archiver)',
    'Internet Explorer 8' => '(MSIE 8\.[0-9]+)',
    'Internet Explorer 7' => '(MSIE 7\.[0-9]+)',
    'Internet Explorer 6' => '(MSIE 6\.[0-9]+)',
    'Internet Explorer 5' => '(MSIE 5\.[0-9]+)',
    'Internet Explorer 4' => '(MSIE 4\.[0-9]+)',
);
foreach($browsers as $browser=>$pattern) {
    if(eregi($pattern, $userAgent)) {
        return $browser; 
    }
}
return 'Unknown'; 
}

これを修正する方法についてのアイデア。また、理解できるように、皆さんが気にしないのであれば、何が起こっているのかについての簡単な説明をお願いします

ありがとう

4

4 に答える 4

3

デリメータを使用することになっています。http://www.php.net/manual/en/reference.pcre.pattern.posix.phpをお読みください。

この場合、以下が機能するはずです。

if(preg_match('`'.$pattern.'`i', $userAgent))
于 2011-07-23T15:11:12.930 に答える
1

ereg()は PHP で正規表現を行う古い方法であり、PCRE (preg_matchおよびその他preg_*) はより高速で強力です。

ereg から PCRE への移行はそれほど難しくありませんが、これら 2 つのエンジンで受け入れられる構文にはいくつかの違いがあります。つまり、おそらくいくつかの正規表現を修正する必要があります。


ここで、受け取るメッセージを説明する違いは、PCRE が regex の前後に区切り文字を想定していることです。

たとえば、正規表現は であってはなりませんがGaleon/Galeon/
区切り文字として好きな文字を使用できます。


詳細については:

その最後のリンクの最初のポイントを引用する:

PCRE 関数では、パターンを区切り文字で囲む必要があります 。

于 2011-07-23T15:11:49.323 に答える
1

試す

if(preg_match("#".$pattern."#", $userAgent)) {
于 2011-07-23T15:13:19.250 に答える
0

ereg と preg の構文は異なります。この場合、それらは十分に似ているので、区切り文字を追加するだけでうまくいくと思います。

于 2011-07-23T15:11:16.050 に答える