PHP Warning: preg_match() [function.preg-match]: Unknown modifier [duplicate]
Anyone have an idea of why this is popping up? Trying to use this to redirect users based on user agent. This warning comes up when user agent is search bot. Also Windows XP MSIE 8 user agent is being incorrectly redirected.
"Warning: preg_match() [function.preg-match]: Unknown modifier 'c' in /.../getos.php on line 36"
function getOS($userAgent) {
$oses = array (
'iPhone' => '(iPhone)',
'iPad' => 'iPad',
'Android' => 'Android',
'Windows 3.11' => 'Win16',
'Windows 95' => '(Windows 95)|(Win95)|(Windows_95)', // Use regular expressions as value to identify operating system
'Windows 98' => '(Windows 98)|(Win98)',
'Windows 2000' => '(Windows NT 5.0)|(Windows 2000)',
'Windows XP' => '(Windows NT 5.1)|(Windows XP)',
'Windows 2003' => '(Windows NT 5.2)',
'Windows Vista' => '(Windows NT 6.0)|(Windows Vista)',
'Windows 7' => '(Windows NT 6.1)|(Windows 7)',
'Windows NT 4.0' => '(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)',
'Windows ME' => 'Windows ME',
'Blackberry' => 'Blackberry',
'Open BSD'=>'OpenBSD',
'Sun OS'=>'SunOS',
'Linux'=>'(Linux)|(X11)',
'Macintosh'=>'(Mac_PowerPC)|(Macintosh)',
'QNX'=>'QNX',
'BeOS'=>'BeOS',
'OS2'=>'OS2',
'Search Bot'=>'(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp/cat)|(msnbot)|(ia_archiver)'
);
//'Safari' => '(Safari)',
foreach($oses as $os=>$pattern){ // Loop through $oses array
// Use regular expressions to check operating system type
if(preg_match("/".$pattern."/i", $userAgent)) { // Check if a value in $oses array matches current user agent.<---------Line 36
return $os; // Operating system was matched so return $oses key
}
}
return 'Unknown'; // Cannot find operating system so return Unknown
}
$operatingsystem = getO开发者_JAVA百科S($_SERVER['HTTP_USER_AGENT']);
Your Search Bot
entry has (Slurp/cat)
in it. The /
is being counted as the end of the regex, and the subsequent c
causes the error.
(Slurp\/cat)
will solve the problem.
精彩评论