Browsertyp ermitteln

PhoenixXP

Mitglied
Ich stehe gerade vor dem Problem, eine Webseite zu erstellen, die sowohl für PCs (CSS-Medientyp: screen) als auch für Handys/PDAs (CSS-Medientyp: handheld) funktionieren soll. Ich bin mir bewußt, das ich per CSS die Darstellung für jeden Gerätetyp einzeln formatieren und mögliche (un)erwünschte Elemente ein-/ausblenden kann. Diese Elemente werden aber trotzdem heruntergeladen und stellen besonders auf den Handy/PDA ein Traffic-Problem dar.
Wie kann ich schnell und unkompliziert die Plattform ermitteln, ohne per $_SERVER['HTTP_USER_AGENT'] alle bekannten und unbekannten Browser abzuprüfen?
 
Ohne eine klare Identifizierung wird es schwer (eher ist es sogar unmöglich), herauszufinden, ob man es mit einem Handheld, Screen oder was auch immer für einem Darstellungsgerät zu tun hat.
In dem von dir genannten Feld steht noch das verwendete OS, sofern es denn vom Client mitgesendet wird. Eventuell lässt sich da via Regex nach bestimmten Handheld- oder Mobiltelefon Systemen filtern?
Alternativ wäre eine Subdomain oder ein bestimmter Unterbereich der Seite sinnvoll, die speziell auf Handheld-Medien zugeschnitten ist - Das zumindest würde die dynamische Entscheidungsfrage vermeiden.

Nichtsdestotrotz bleibt natürlich auch zu überlegen, ob eine zB 5kB große HTML- und eine 2kB große CSS-Datei so großartig sind bei den heutigen Übertragungsraten (auch im Mobilbereich)?
 
Die Größen der HTML- und CSS-Dateien sind ja auch nicht das Problem. Die Webseiten bestehen ja oft aus vielen kleinen und großen Bildern, die, sofern sie in der HTML-Datei direkt eingebunden sind, auch dann geladen werden, wenn CSS die Anzeige später ausblendet werden (wenn ich da falsch liege, bitte ich um eine Korrektur meiner Aussage).
Die Javascript-Variante scheitert schon daran, weil es bei vielen deaktiviert ist oder (wenn auch selten) nicht vorhanden ist.
 
Ich habe heute mal die get_browser()-Funktion ausprobiert und dafür passenderweise gleich die dafür notwendige 'browscap.ini' in einer aktuellen Version heruntergeladen.
Das Ergebnis:
Während die Funktion den Mozilla Firefox und den Internet Explorer und die Plattformen gleich erkannte, scheiterte er am Opera. Eine kurze Durchsicht der 'browscap.ini' ergab dann, das der Opera komplett fehlte, und dafür der IE 7 gleich in allen Windows-Varianten 'existierte', obwohl er nur unter Windows XP/Vista installierbar ist. :confused:
 
Ich würde vermutlich mit zwei Domains arbeiten. Probier mal folgende ursprünglich von Andy Moore entworfene Funktion:
PHP:
function detect_mobile_device() {
	if( isset($_SERVER['HTTP_USER_AGENT']) ) {
		// check if the user agent value claims to be windows but not windows mobile
		if( stristr($_SERVER['HTTP_USER_AGENT'],'windows') && !stristr($_SERVER['HTTP_USER_AGENT'],'windows ce') ) {
			return false;
		}
		// check if the user agent gives away any tell tale signs it's a mobile browser
		if( preg_match('/up\.browser|up\.link|windows ce|iemobile|mini|mmp|symbian|midp|wap|phone|pocket|mobile|pda|psp/', $_SERVER['HTTP_USER_AGENT']) ) {
			return true;
		}
	}
	// check the http accept header to see if wap.wml or wap.xhtml support is claimed
	if( isset($_SERVER['HTTP_ACCEPT']) && stristr($_SERVER['HTTP_ACCEPT'],'text/vnd.wap.wml') || stristr($_SERVER['HTTP_ACCEPT'],'application/vnd.wap.xhtml+xml') ) {
		return true;
	}
	// check if there are any tell tales signs it's a mobile device from the _server headers
	if( isset($_SERVER['HTTP_X_WAP_PROFILE']) || isset($_SERVER['HTTP_PROFILE']) || isset($_SERVER['X-OperaMini-Features']) || isset($_SERVER['UA-pixels']) ) {
		return true;
	}
	// build an array with the first four characters from the most common mobile user agents
	$a = array('acs-','alav','alca','amoi','audi','aste','avan','benq','bird','blac','blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno','ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-','maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-','newt','noki','opwv','palm','pana','pant','pdxg','phil','play','pluc','port','prox','qtek','qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar','sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-','tosh','tsm-','upg1','upsi','vk-v','voda','w3c ','wap-','wapa','wapi','wapp','wapr','webc','winw','winw','xda','xda-');
	if( isset($_SERVER['HTTP_USER_AGENT']) ) {
		foreach( $a as $val ) {
			// check if the user agent begins with the characters
			if( strpos($_SERVER['HTTP_USER_AGENT'], $val) === 0 ) {
				return true;
			}
		}
	}
	return false;
}
 
Danke. :)
Werde es mal ausprobieren.
Wird eh darauf hinauslaufen, dass ich es mit einer Einstiegsseite und/oder Subdomains machen muss.
 
Zurück