开发者

PHP Warning: preg_match() [function.preg-match]: Unknown modifier [duplicate]

This question already has answers here: Warning: preg_replace(): Unknown modifier (3 answers) Closed 3 years ago.

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜