Der Versuch, den Browser eines Benutzers nur mit PHP zu erkennen, ist $_SERVER[‘HTTP_USER_AGENT’] ein zuverlässiger Weg? Sollte ich mich stattdessen für die entscheiden get_browser Funktion? Welche bringt Ihrer Meinung nach genauere Ergebnisse?
Wenn diese Methode pragmatisch ist, ist es nicht ratsam, sie zum Ausgeben relevanter CSS-Links zu verwenden, zum Beispiel:
Ich habe diese Frage bemerkt, wollte jedoch klären, ob dies für eine CSS-orientierte Erkennung gut ist.
AKTUALISIEREN:
etwas wirklich Verdächtiges: Ich habe es versucht echo $_SERVER['HTTP_USER_AGENT']; auf IE 7 und das ist, was es ausgibt:
Mozilla/4.0 (kompatibel; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618)
Safari gab auch etwas Seltsames mit “mozilla” darin. Was gibt?
Das “Mozilla/4.0”-Bit ist aus Legacy-Gründen drin … sogar in IE8.
– Schnauze
13. Februar 2010 um 13:30 Uhr
IE bezeichnet sich seit einiger Zeit als Mozilla 4.0. Ich habe gelesen, dass sie dies aus Kompatibilitätsgründen getan haben, aber ich kann die Quelle gerade nicht finden. Wenn ich raten müsste, würde ich sagen, das ist ein Überbleibsel aus der NetScape/IE-Zeit.
– Bobbi
13. Februar 2010 um 13:31 Uhr
User-Agent ist nicht zuverlässig. Aber es ist der einzige Weg, es zu erraten.
Funktioniert ohne Probleme mit der neuesten Version von Firefox.
– Benutzer198989
16. Mai 2013 um 7:17 Uhr
Ekramul Hoque
Überprüfen Sie diesen Code, ich habe festgestellt, dass dies nützlich ist. Überprüfen Sie nicht Mozilla, da die meisten Browser dies als Zeichenfolge für den Benutzeragenten verwenden
@Farhad Hallo, ich verwende dieses Stück Code von dir, aber ich bin nur neugierig, ob eine switch-Anweisung nicht schneller wäre. Persönlich fühlt es sich einfach so an, als würde eine Switch-Anweisung besser passen. Aber danke, das hat mein Problem gelöst
– Fernando Silva
21. Juni 2014 um 16:46 Uhr
funktioniert nicht, das Skript zeigt Chrome zurück, wenn der Browser Opera ist.
– Die EasyLearn-Akademie
2. September 2017 um 5:58 Uhr
Um den Edge-Browser zu überprüfen, können Sie hinzufügen elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'Edge') !== FALSE) echo 'Microsoft Edge'; nach dem if
– Mohammad Salehi
1. Dezember 2018 um 15:53 Uhr
Das funktioniert wirklich gut, ich habe keine Ahnung warum. Willst du es erklären?
– Benutzer11480180
21. August 2019 um 9:12 Uhr
Mit einer bestehenden Methode (z get_browser) ist wahrscheinlich besser, als selbst etwas zu schreiben, da es (besser) unterstützt wird und mit neueren Versionen aktualisiert wird. Möglicherweise gibt es auch verwendbare Bibliotheken, um die Browser-ID auf zuverlässige Weise abzurufen.
Entschlüsselung der $_SERVER['HTTP_USER_AGENT'] ist schwierig, da viele Browser ziemlich ähnliche Daten haben und dazu neigen, sie für ihre eigenen Vorteile (missbrauchen) zu verwenden. Aber wenn Sie sie wirklich entschlüsseln möchten, können Sie die Informationen auf verwenden diese Seite für alle verfügbaren Agenten-IDs. Diese Seite zeigt auch, dass Ihre Beispielausgabe tatsächlich zu IE 7 gehört. Weitere Informationen zu den Feldern in der Agenten-ID selbst finden Sie unter diese Seiteaber wie ich bereits sagte, neigen Browser dazu, es für ihre eigenen Vorteile zu verwenden, und es könnte in einem (etwas) anderen Format vorliegen.
Diese Funktion funktioniert nicht auf jedem Server. Versuchte 3 Server – 0/3.
– ViliusL
18. Juni 2018 um 14:34 Uhr
Wie ViliusL sagt, funktioniert es nicht auf jedem Server, da der Pfad zu seiner INI-Datei in der php.ini oder der “http.config”-Datei auf Apache festgelegt werden muss. Das bedeutet, dass Sie Zugriff darauf haben müssen.
– JSG
16. Oktober 2019 um 19:50 Uhr
Übrigens, falls jemand es versucht hat, setzen Sie die Browscap-Direktive auf Skriptebene mit ini_set('browscap', '/path/to/browscap.ini'); scheint nicht zu funktionieren. Diese Direktive muss in einer PHP-Konfigurationsdatei festgelegt werden (wie im obigen Kommentar angegeben).
– Leo Galleguillos
26. Mai 2020 um 18:46 Uhr
Jay
Der Benutzeragent kann gefälscht werden, und es ist besser, sich nicht auf die Zeichenfolge des Benutzeragenten zu verlassen, als dass Sie eine CSS3-Medienabfrage verwenden können, wenn Sie nur die Orientierung erkennen möchten (Sie können das CSS des berühmten responsiven Framework-Bootstrap untersuchen, um zu überprüfen, wie Sie damit umgehen können Orientierungsteil mit CSS)
Hier ist kleines CSS:
@media only screen and (max-width: 999px) {
/* rules that only apply for canvases narrower than 1000px */
}
@media only screen and (device-width: 768px) and (orientation: landscape) {
/* rules for iPad in landscape orientation */
}
@media only screen and (min-device-width: 320px) and (max-device-width: 480px) {
/* iPhone, Android rules here */
}
Weiterlesen : Über die CSS-Ausrichtungserkennung
ODER Sie können die Orientierung mit JavaScript finden:
// Listen for orientation changes
window.addEventListener("orientationchange", function() {
// Announce the new orientation number
alert(window.orientation);
}, false);
Wenn Sie wirklich mit der Zeichenfolge des Benutzeragenten arbeiten möchten, wird Ihnen dieser Code sehr helfen und in fast jedem Browser gut funktionieren:
<?php
class BrowserDetection {
private $_user_agent;
private $_name;
private $_version;
private $_platform;
private $_basic_browser = array (
'Trident\/7.0' => 'Internet Explorer 11',
'Beamrise' => 'Beamrise',
'Opera' => 'Opera',
'OPR' => 'Opera',
'Shiira' => 'Shiira',
'Chimera' => 'Chimera',
'Phoenix' => 'Phoenix',
'Firebird' => 'Firebird',
'Camino' => 'Camino',
'Netscape' => 'Netscape',
'OmniWeb' => 'OmniWeb',
'Konqueror' => 'Konqueror',
'icab' => 'iCab',
'Lynx' => 'Lynx',
'Links' => 'Links',
'hotjava' => 'HotJava',
'amaya' => 'Amaya',
'IBrowse' => 'IBrowse',
'iTunes' => 'iTunes',
'Silk' => 'Silk',
'Dillo' => 'Dillo',
'Maxthon' => 'Maxthon',
'Arora' => 'Arora',
'Galeon' => 'Galeon',
'Iceape' => 'Iceape',
'Iceweasel' => 'Iceweasel',
'Midori' => 'Midori',
'QupZilla' => 'QupZilla',
'Namoroka' => 'Namoroka',
'NetSurf' => 'NetSurf',
'BOLT' => 'BOLT',
'EudoraWeb' => 'EudoraWeb',
'shadowfox' => 'ShadowFox',
'Swiftfox' => 'Swiftfox',
'Uzbl' => 'Uzbl',
'UCBrowser' => 'UCBrowser',
'Kindle' => 'Kindle',
'wOSBrowser' => 'wOSBrowser',
'Epiphany' => 'Epiphany',
'SeaMonkey' => 'SeaMonkey',
'Avant Browser' => 'Avant Browser',
'Firefox' => 'Firefox',
'Chrome' => 'Google Chrome',
'MSIE' => 'Internet Explorer',
'Internet Explorer' => 'Internet Explorer',
'Safari' => 'Safari',
'Mozilla' => 'Mozilla'
);
private $_basic_platform = array(
'windows' => 'Windows',
'iPad' => 'iPad',
'iPod' => 'iPod',
'iPhone' => 'iPhone',
'mac' => 'Apple',
'android' => 'Android',
'linux' => 'Linux',
'Nokia' => 'Nokia',
'BlackBerry' => 'BlackBerry',
'FreeBSD' => 'FreeBSD',
'OpenBSD' => 'OpenBSD',
'NetBSD' => 'NetBSD',
'UNIX' => 'UNIX',
'DragonFly' => 'DragonFlyBSD',
'OpenSolaris' => 'OpenSolaris',
'SunOS' => 'SunOS',
'OS\/2' => 'OS/2',
'BeOS' => 'BeOS',
'win' => 'Windows',
'Dillo' => 'Linux',
'PalmOS' => 'PalmOS',
'RebelMouse' => 'RebelMouse'
);
function __construct($ua="") {
if(empty($ua)) {
$this->_user_agent = (!empty($_SERVER['HTTP_USER_AGENT'])?$_SERVER['HTTP_USER_AGENT']:getenv('HTTP_USER_AGENT'));
}
else {
$this->_user_agent = $ua;
}
}
function detect() {
$this->detectBrowser();
$this->detectPlatform();
return $this;
}
function detectBrowser() {
foreach($this->_basic_browser as $pattern => $name) {
if( preg_match("https://stackoverflow.com/".$pattern."/i",$this->_user_agent, $match)) {
$this->_name = $name;
// finally get the correct version number
$known = array('Version', $pattern, 'other');
$pattern_version = '#(?<browser>' . join('|', $known).')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
if (!preg_match_all($pattern_version, $this->_user_agent, $matches)) {
// we have no matching number just continue
}
// see how many we have
$i = count($matches['browser']);
if ($i != 1) {
//we will have two since we are not using 'other' argument yet
//see if version is before or after the name
if (strripos($this->_user_agent,"Version") < strripos($this->_user_agent,$pattern)){
@$this->_version = $matches['version'][0];
}
else {
@$this->_version = $matches['version'][1];
}
}
else {
$this->_version = $matches['version'][0];
}
break;
}
}
}
function detectPlatform() {
foreach($this->_basic_platform as $key => $platform) {
if (stripos($this->_user_agent, $key) !== false) {
$this->_platform = $platform;
break;
}
}
}
function getBrowser() {
if(!empty($this->_name)) {
return $this->_name;
}
}
function getVersion() {
return $this->_version;
}
function getPlatform() {
if(!empty($this->_platform)) {
return $this->_platform;
}
}
function getUserAgent() {
return $this->_user_agent;
}
function getInfo() {
return "<strong>Browser Name:</strong> {$this->getBrowser()}<br/>\n" .
"<strong>Browser Version:</strong> {$this->getVersion()}<br/>\n" .
"<strong>Browser User Agent String:</strong> {$this->getUserAgent()}<br/>\n" .
"<strong>Platform:</strong> {$this->getPlatform()}<br/>";
}
}
$obj = new BrowserDetection();
echo $obj->detect()->getInfo();
Der obige Code funktioniert für mich fast auf jedem Browser und ich hoffe, er wird Ihnen ein wenig helfen.
oh Junge, aber Sie wissen nicht einmal, was er mit diesen Informationen tun will, und schlagen Medienanfragen vor …
– Benutzer151496
23. Juni 2015 um 12:27 Uhr
Ein kleines Detail, in Edge erkennt es es als Chrome, um es zu beheben, fügen Sie einfach im _basic_browser-Array vor Chrome das ‘Edg’ => ‘Microsoft Edge’ hinzu,
– ciberelfo
25. Januar 2021 um 12:59 Uhr
Lebenslehrer
class Browser {
/**
Figure out what browser is used, its version and the platform it is
running on.
The following code was ported in part from JQuery v1.3.1
*/
public static function detect() {
$userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);
// Identify the browser. Check Opera and Safari first in case of spoof. Let Google Chrome be identified as Safari.
if (preg_match('/opera/', $userAgent)) {
$name="opera";
}
elseif (preg_match('/webkit/', $userAgent)) {
$name="safari";
}
elseif (preg_match('/msie/', $userAgent)) {
$name="msie";
}
elseif (preg_match('/mozilla/', $userAgent) && !preg_match('/compatible/', $userAgent)) {
$name="mozilla";
}
else {
$name="unrecognized";
}
// What version?
if (preg_match('/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/', $userAgent, $matches)) {
$version = $matches[1];
}
else {
$version = 'unknown';
}
// Running on what platform?
if (preg_match('/linux/', $userAgent)) {
$platform = 'linux';
}
elseif (preg_match('/macintosh|mac os x/', $userAgent)) {
$platform = 'mac';
}
elseif (preg_match('/windows|win32/', $userAgent)) {
$platform = 'windows';
}
else {
$platform = 'unrecognized';
}
return array(
'name' => $name,
'version' => $version,
'platform' => $platform,
'userAgent' => $userAgent
);
}
}
$browser = Browser::detect();
Wenn stripos($_SERVER[‘HTTP_USER_AGENT’],”mozilla”)!==false)
Das ist kein sinnvoller Test, fast jeder Browser identifiziert sich als Mozilla.
ist $_SERVER[‘HTTP_USER_AGENT’] ein zuverlässiger Weg?
Nein.
Sollte ich mich stattdessen für die Funktion get_browser entscheiden?
Nein.
Browser-Sniffing auf der Serverseite ist ein verlorenes Spiel. Abgesehen von all den Problemen beim Versuch, die UA-Zeichenfolge zu analysieren, den Browsern, die lügen, den obskuren Browsern und der Möglichkeit, dass der Header überhaupt nicht vorhanden ist, müssen Sie den festlegen, wenn Sie einen anderen Seiteninhalt für einen anderen Browser zurückgeben Vary Kopfzeile einzufügen User-Agentandernfalls können Caching-Proxys die falsche Version der Seite an den falschen Browser zurückgeben.
Aber wenn Sie hinzufügen Vary: User-Agent Der defekte Caching-Code des IE wird verwirrt und lädt die Seite jedes Mal neu. Du kannst also nicht gewinnen.
Wenn Sie Browser-Sniffs durchführen müssen, können Sie dies auf der Clientseite tun, indem Sie JavaScript und speziell im Fall von IE bedingte Kommentare verwenden. Es ist ein Glück, dass IE bedingte Kommentare unterstützt, da dies der einzige Browser ist, für den Sie häufig Problemumgehungen benötigen. (Siehe die Antwort von scunliffe für die gängigste Strategie.)
Gemeinschaft
Bei Google taucht immer noch ein alter Beitrag auf. get_browser() ist die beste Lösung, aber das Bearbeiten von php.ini könnte unmöglich sein. Laut diesem Beitrag können Sie die Eigenschaft browscap nicht ini_set setzen. Was bleibt also? phpbrowscap scheint die Arbeit zu erledigen. Die Dokumente sind nicht großartig. Wenn Sie also nicht möchten, dass sie automatisch aktualisiert werden (standardmäßig aktiviert), müssen Sie dies festlegen
Was mir auffällt, der echte Browsername kommt immer nach dem letzten (parentheses) mit Ausnahme von IE, wo kein Browsername nach dem letzten steht (parentheses). Ich frage mich, ob ich nur nach dem letzten lese ) Genauigkeit verbessern könnte.
Sie können dies in verschiedenen Benutzeragenten bemerken:
Ich habe dies auch auf Chrome, Edge und Firefox Developer getestet und es hat genau funktioniert. (obwohl ich ältere Versionen dieser Browser noch nicht getestet habe)
Es zeigt “Safari” sowohl auf meinem Desktop-Chrome->Inspektionsmodus als auch auf meinem mobilen Safari
– Benutzer3495363
23. Juni 2021 um 4:38 Uhr
8685300cookie-checkzuverlässige Benutzer-Browser-Erkennung mit phpyes
Das “Mozilla/4.0”-Bit ist aus Legacy-Gründen drin … sogar in IE8.
– Schnauze
13. Februar 2010 um 13:30 Uhr
IE bezeichnet sich seit einiger Zeit als Mozilla 4.0. Ich habe gelesen, dass sie dies aus Kompatibilitätsgründen getan haben, aber ich kann die Quelle gerade nicht finden. Wenn ich raten müsste, würde ich sagen, das ist ein Überbleibsel aus der NetScape/IE-Zeit.
– Bobbi
13. Februar 2010 um 13:31 Uhr
User-Agent ist nicht zuverlässig. Aber es ist der einzige Weg, es zu erraten.
– Gumbo
13. Februar 2010 um 13:35 Uhr
@Bobby webaim.org/blog/user-agent-string-history
– Knü
17. Februar 2010 um 0:51 Uhr
Funktioniert ohne Probleme mit der neuesten Version von Firefox.
– Benutzer198989
16. Mai 2013 um 7:17 Uhr