PHP: come riconoscere e gestire i browser testuali

Creato il 17 maggio 2010 da Dymissy

Generalmente il controllo del browser viene effettuato lato client attraverso i commenti condizionali oppure attraverso Javascript. Tale scelta è dovuta alla maggiore affidabilità di tali strumenti e soprattutto perchè la necessita di determinare il browser è dovuto a motivazioni stilistiche o che, semplicemente, riguardano il solo lato client.

Ci sono alcuni casi però in cui si ha bisogno di verificare il browser utilizzato dall’utente anche nel lato server. Uno di questi casi è sicuramente quando si necessita di reindirizzare utenti che visitano il sito con browser testuali su pagine ad essi dedicate. Nel mio portfolio personale, infatti, effettuo tale controllo preliminare sul browser attraverso PHP dato che l’elaborato layout causerebbe non pochi problemi agli utenti ipovedenti o comunque disabili.

HTTP_USER_AGENT

Innanzitutto vediamo “dove” prelevare il tipo di browser utilizzato dall’utente. Quello di cui abbiamo bisogno è uno degli array “speciali” del PHP, ovvero $_SERVER. Stampando a schermo il contenuto della variabile HTTP_USER_AGENT dell’array $_SERVER verranno visualizzate diverse informazioni relative al sistema e al browser che stiamo utilizzando.

view sourceprint?

1 echo $_SERVER['HTTP_USER_AGENT'];

Creando una pagina contenente il precedente codice e, visitandola con diversi browser, ho ottenuto questi risultati:

  • Firefox: Mozilla/5.0 (Windows; U; Windows NT 6.1; it; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 GTB7.0
  • IE8: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; GTB6; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0)
  • Opera: Opera/9.80 (Windows NT 6.1; U; it) Presto/2.5.24 Version/10.53
  • Chrome: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.9 (KHTML, like Gecko) Chrome/6.0.401.1 Safari/533.9
  • Safari: Mozilla/5.0 (Windows; U; Windows NT 6.1; it-IT) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10

Come possiamo vedere, i risultati sono del tutto diversi per ogni browser e questo complica un pochino le cose agli sviluppatori.

Oltre quelli appena visti ci sono i browser testuali visti in precedenza, i browser per versioni mobili, i BOT dei motori di ricerca e così via.

Riconoscere un browser testuale

In questo articolo mi occuperò dei soli browser testuali e, in particolare del browser Lynx che è il più diffuso. Per una lista dei browser testuali più conosciuti si può fare riferimento al seguente link: http://www.webxtutti.it/link_brow.htm.

La soluzione da me proposta non è definitiva in quanto non tiene conto di tutti quelli presenti in rete che sono tanti. Mi sono limitato ad esporre l’idea basandomi su quello più utilizzato.

L’idea è di analizzare il contenuto della variabile vista in pocanzi e, attraverso una semplicissima espressione regolare, effettuare un redirect alla pagina desiderata.

Lo User Agent del browser testuale è il seguente:

Lynx/2.8.7rel.1 libwww-FM/2.14FM SSL-MM/1.4.1 OpenSSL/0.9.8k

Possiamo sfruttare proprio il nome del browser posto all’inizio della stringa per effettuare il controllo con la regular expression. La Regex, molto semplice, è la seguente:

view sourceprint?

1 preg_match('/^Lynx/', $_SERVER['HTTP_USER_AGENT'])

A questo punto abbiamo tutto il necessario per effettuare una semplicissima if che effettua il redirect:

view sourceprint?

1 if( preg_match('/^Lynx/', $_SERVER['HTTP_USER_AGENT']) ) header('Location: ie.html');

Affidabilità

La percentuale di affidabilità della soluzione vista è piuttosto alta. L’unico caso in cui il suo funzionamento non è corretto è dovuto alla modifica manuale della stringa relativa allo User Agent. Difficilmente un utente ben intenzionato va a modificare tale stringa anche se nelle impostazioni di Lynx è possibile modificarla a piacimento, così come è possibile per i più “furbi” modificare tale stringa anche nei normali browser. In conclusione, quindi, finchè si visita la pagina con buone intenzioni la percentuale di funzionamento è vicina al 100%.


Potrebbero interessarti anche :

Possono interessarti anche questi articoli :