Это может быть какая-то простая глупость, но я не могу понять это самостоятельно.
Я пытаюсь создать сценарий мобильного обнаружения и добился большого успеха. Но при более глубоком рассмотрении я обнаружил, что одно из моих IF
предложений, похоже, возвращает TRUE
, но с неправильным соответствием.
У меня есть этот массив:
private $arrAgent = array(
'sony',
'symbian',
'nokia',
'samsung',
'mobile',
'windows ce',
'blackberry',
'ericsson',
'danger',
'palm',
'series60',
'palmsource',
'pocketpc',
'smartphone',
'vodafone',
'iphone',
'ipad',
'android'
);
тогда у меня есть функция, которая зациклит массив и найдет, если он соответствует
private function detectMobileAgent() {
if ($this->MobileDevice === false) {
foreach ($this->arrAgent as $key => $value) {
if (strpos(Server::userAgent(), $value) !== false) {
$this->MobileDevice = true;
// echo $value;
break;
}
}
}
}
Теперь проблема в том, что я обнаружил ошибку в пользовательском агенте iPad / iPhone, которая мешает мне получить четкое чтение.
Пользовательский агент iPad выглядит следующим образом:
mozilla/5.0 (ipad; u; cpu os 4_3_2 like mac os x; en-us) applewebkit/533.17.9 (khtml, like gecko) version/5.0.2 mobile/8h7 safari/6533.18.5
Я получил это из симулятора iOS, который поставляется с xCode, на моем реальном iPad я увидел почти идентичный пользовательский агент, только версия ОС и версия safari были разными.
Теперь моя проблема в том, что в этом пользовательском агенте позиция строки возвращает совпадение для ipad
И mobile
, как я могу остановить его после сопоставления первой строки?