Ik ben bezig met het schrijven van een detectiescript voor mobiele telefoons. Ik heb daarvoor het volgende stukje PHP bedacht:
Op zich werkt het goed, maar lang niet alle telefoons worden goed gedetecteerd.
Hier een overzichtje met referers/user_agent van mobiele telefoons:
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
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:
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: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
Ook bij Nokia zijn de strings per telefoon verschillend: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
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.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 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 ]