[php] Detectie Tekefoons middels user_agent in arrays

Pagina: 1
Acties:
  • 47 views sinds 30-01-2008

  • JJapie
  • Registratie: Juli 2001
  • Laatst online: 22:34
Ik ben bezig met het schrijven van een detectiescript voor mobiele telefoons. Ik heb daarvoor het volgende stukje PHP bedacht:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?

$browserinfo = split("/",$HTTP_USER_AGENT,5);

$tel_referer = array ('portalmmm', 'SHARP-TQ-GX1', 'UP.Browser', 'Wapagsim', 'DoCoMo'); //de delen van user_agents

    if (in_array($browserinfo[0], $tel_referer))
   {
      include("imode.php"); //de pagina waarnaar je wordt doorverwezen als het een mobile device betreft
    } else {
      include("ie.php"); //de pagina waarnaar je wordt doorverwezen als het GEEN mobile device betreft
    }
?>


Op zich werkt het goed, maar lang niet alle telefoons worden goed gedetecteerd.

Hier een overzichtje met referers/user_agent van mobiele telefoons:
DoCoMo/1.0/N503i/c10
KDDI-SN23 UP.Browser/6.0.8.2 (GUI) MMP/1.1
portalmmm/1.0 n21i-10
portalmmm/1.0 n21i-10(c10)
portalmmm/1.0 n21i-20(c10)
portalmmm/1.0 n22i-10(c10)
portalmmm/1.0 TS21i-10(c10)
SHARP-TQ-GX1/1.0 UP.Browser/6.1.0.5.102 (GUI) MM
SHARP-TQ-GX10/1.0 Profile/MIDP-1.0 Configuration
SHARP-TQ-GX10/1.1 Profile/MIDP-1.0 Configuration
UP.Browser/3.04-CA14 UP.Link/3.4.5.6
UP.Browser/3.04-ST14 UP.Link/3.4.5.6
Wapagsim
De meeste van deze worden wel gedetecteerd. Het Nu wil het zo zijn dat bijv. de Sharp bij verschillende software versies verschillende referers/user_agents meegeeft:
KDDI-KC21 UP.Browser/6.0.2.273 (GUI) MMP/1.1
KDDI-MA21 UP.Browser/6.0.6 (GUI) MMP/1.1
KDDI-SA21 UP.Browser/6.0.6 (GUI) MMP/1.1
KDDI-SN21 UP.Browser/6.0.7 (GUI) MMP/1.1
KDDI-SN22 UP.Browser/6.0.7 (GUI) MMP/1.1
Ook bij Nokia zijn de strings per telefoon verschillend:
Nokia3510i/1.0 (03.51) Profile/MIDP-1.0 Configur
Nokia3650/1.0 SymbianOS/6.1 Series60/1.2 Profile
Nokia5100/2.0 Profile/MIDP-1.0 Configuration/CLD
Nokia7250/1.0 () Profile/MIDP-1.0 Configuration/
Ik wil mijn script zo aanpassen dat er gekeken wordt of delen van de referers/user_agent in de array staan. Dus dat er gecontroleerd wordt of er bijv. UP.Browser in de refferer staat, of Nokia.

Ik zou kunnen werken met een regex, en een array met alle namen die er zijn. Dan checken of de user_agent in de array zit, als het erin zit, sturen naar de imode pagina anders niet.

Dit klinkt erg logisch. Maar ik heb nu al enkele regular expression tuts gelezen en goed bestudeerd, maar ik kom er dus niet uit.
Wat ik denk dat ik dus moet doen:
1. een array maken met de delen van de user_agent die veel voorkomen
2. de user_agent splitten
3. controleren middels een regexp of een deel van de useragent voorkomt in de array..

Ik heb het idee dat dit niet helemaal klopt. Het gaat al fout bij het splitten... Hij split bij een '/'. Dan krijg je dus hele lange strings in een array.. Die matchen nooit met de delen van strings in de onder punt 1 bedoelde array..

Kortom: hoe pak ik dit goed aan?? Wie helpt me op weg?? Ik ben dus de weg kwijt :(

[ Voor 4% gewijzigd door JJapie op 11-04-2003 14:09 . Reden: code edit ]


  • MikeN
  • Registratie: April 2001
  • Laatst online: 22-08 16:46
Een simpele:
PHP:
1
2
$is_mobile = preg_match("!(Nokia|KDDI|Sharp|portalmm|
                     UP\.Browser|Wapagsim|DoCoMo)!", $useragentstring);

zou volgens mij genoeg moeten zijn?

[ Voor 15% gewijzigd door MikeN op 11-04-2003 14:11 ]


  • JJapie
  • Registratie: Juli 2001
  • Laatst online: 22:34
En dan is de split niet meer nodig, of wel?

  • MikeN
  • Registratie: April 2001
  • Laatst online: 22-08 16:46
GFM schreef op 11 April 2003 @ 14:12:
En dan is de split niet meer nodig, of wel?
In principe niet. Het enige waar hij hier naar kijkt is of 1 van die stukjes, gescheiden met | (een OR teken), voorkomt in de string.

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

preg_match dus.

Vrij standaard, en ik heb ongeveer gelijke vragen al vaker voorbij zien komen.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Dit topic is gesloten.