zuverlässige Benutzer-browser-Erkennung mit php
Versuch zu erkennen, den browser eines Benutzers mit PHP nur, ist $_SERVER['HTTP_USER_AGENT'] eine zuverlässige Möglichkeit? Sollte ich stattdessen entscheiden sich für die get_browser Funktion? die einen finden Sie bringt genauere Ergebnisse?
Wenn diese Methode ist pragmatisch, ist es schlecht beraten, es zu benutzen für die Ausgabe relevanten CSS-links, zum Beispiel:
if(stripos($_SERVER['HTTP_USER_AGENT'],"mozilla")!==false)
echo '<link type="text/css" href="mozilla.css" />';
Bemerkte ich diese Frage, allerdings wollte ich klären, ob das gut für CSS-oriented detection.
UPDATE:
etwas wirklich verdächtig: ich habe versucht echo $_SERVER['HTTP_USER_AGENT'];
auf IE 7 und das ist, was es Ausgang:
Mozilla/4.0 (compatible; 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 etwas komisch mit "mozilla" in es auch. Was gibt?
- "Mozilla/4.0" - bit ist es für legacy-Gründen... auch im IE8.
- IE identifiziert sich für ruhige einiger Zeit nun als Mozilla 4.0. Ich habe gelesen, dass Sie Taten dies aus Gründen der Kompatibilität, aber nicht finden können, die Quelle jetzt. Wenn ich denke, ich würde sagen, dies ist ein Trümmer von NetScape/IE Zeit.
- User-Agent ist nicht zuverlässig. Aber es ist der einzige Weg, zu erraten.
- webaim.org/blog/user-agent-string-history
- Nett, danke!
- Funktioniert ohne Probleme auf der neuesten version von firefox.
- Wo sind die vielen (guten) browser-Detektoren um. Versuchen Sie, auf der hier aufgeführten github.com/ThaDafinser/UserAgentParser
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mithilfe einer vorhandenen Methode (ie
get_browser
) ist wahrscheinlich besser als das schreiben selbst etwas, da es (besser) unterstützen und wird aktualisiert mit neueren Versionen. Es könnte auch nutzbare Bibliotheken gibt, für Sie immer die browser-id auf zuverlässige Art und Weise.Decodierung der
$_SERVER['HTTP_USER_AGENT']
ist schwierig, da viele Browser haben ganz ähnliche Daten und neigen dazu, zu (mis)nutzen es für Ihre eigenen Vorteile. Aber wenn Sie wirklich wollen, zu entschlüsseln, können Sie die Informationen verwenden, die auf auf dieser Seite für alle verfügbaren Agenten-ids.Diese Seite zeigt auch, dass dein Beispiel-Ausgabe tatsächlich gehört zu IE 7. Mehr Informationen über die Felder im agent-id selbst kann werden gefunden auf auf dieser Seite, aber wie ich schon sagte-Browser neigen dazu, verwenden Sie es für Ihre eigenen Vorteile und es könnte sein, in einem (leicht) anderen format.
Überprüfen Sie diesen code habe ich gefunden , dass dies nützlich ist. Nicht überprüfen Mozilla
da die meisten browser verwenden Sie diese als user-agent-string
elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'Edge') !== FALSE) echo 'Microsoft Edge';
nachif
Ist das nicht ein nützlicher test, fast jeder browser identifiziert sich als Mozilla.
Nicht.
Nicht.
Browser-sniffing auf der server-Seite ist ein Spiel zu verlieren. Abgesehen von all den Fragen zu versuchen, zu analysieren, den UA-string, der Browser, die Lüge, die obskuren Browser und die Möglichkeit, den header gibt es nicht an allen, wenn Sie zurück, andere Inhalte auf der Seite für einen anderen browser, müssen Sie den
Vary
- header enthaltenUser-Agent
, andernfalls caching-proxies zurückgeben kann, die falsche version der Seite auf den falschen browser.Aber wenn Sie hinzufügen
Vary: User-Agent
IE kaputt caching-code verwechselt wird und lädt die Seite jedes mal. So kann man nicht gewinnen.Wenn Sie müssen die browser-sniff, der Ort, es zu tun ist auf der client-Seite mit JavaScript, speziell auch im IE der Fall, bedingte Kommentare. Es ist ein Glück, dass es den IE, unterstützt conditional comments, da der browser Sie müssen Häufig workarounds für. (Siehe scunliffe die Antwort auf die häufigste Strategie.)
User-Agent gefälscht werden kann und es besser, nicht davon abhängen, Benutzer-agent-Zeichenfolge nicht dann, können Sie verwenden eine CSS3 media queries, wenn Sie nur wollen, um zu erkennen, Orientierung (lernen Sie CSS von der berühmten responsive framework bootstrap um zu überprüfen, wie Sie behandeln können, die Orientierung Teil mit CSS)
Hier ist wenig CSS :
Lesen Sie mehr : Über CSS-orientation detection
ODER finden Sie der Orientierung mithilfe von JavaScript :
Lesen Sie mehr : Zu erkennen Orientierung über JS
Schließlich, wenn Sie wirklich will, gehen Sie mit user-agent-string, dann wird dieser code wird Ihnen helfen, eine Menge, funktionieren fast auf jedem browser :
Der obige code funktioniert bei mir fast auf jedem browser und ich hoffe, es wird Euch ein bisschen helfen.
Alte post kommt immer noch die Google. get_browser() wird die beste Lösung, aber editieren von php.ini wäre unmöglich. Nach dieser Beitrag können Sie nicht mit ini_set die browscap-Eigenschaft. Was bleibt also übrig? phpbrowscap scheint, um den job zu erledigen. Die docs nicht so toll, also, wenn Sie nicht wollen, dass es auf auto-update (standardmäßig), dann müssen Sie
Ich denke, dass sich auf der userAgent ist ein bisschen schwach, wie es kann (und wird) oft gefälscht.
Wenn Sie möchten, servieren CSS nur für IE, verwenden Sie einen bedingten Kommentar ein.
oder wenn Sie wollen einfach nur eine für IE6:
Da es ein Kommentar sein ignoriert von den Browsern... außer den IE, lädt es, wenn der if-test entspricht der aktuellen browser.
@Ekramul Hoque auf dem richtigen Weg war, aber es gibt einige Mängel auf seine Antwort.
Zuerst von allen, würde ich anfangen, mit Edge als Internet Explorer nicht enthalten, der Begriff
Edge
in jedem seiner FH.Dann weiter nach hinten arbeiten, wie in früheren Versionen des IE nicht benutzen das
Trident
- engine und wird daher nicht enthalten es in Ihre UA.Müssen wir Ziel, iOS-Browsern nächsten, so dass die nachfolgenden Abfragen nicht stören, mit diesem ein. Alle iOS-Browser auf webkit-mit der Ausnahme von Opera Mini, der hat seine Darstellung von einem remote-server anstelle des Geräts. Dies bedeutet, wir können das Ziel der OS, die in der UA mit
iOS
- und exclude-UAs enthaltenOpera
.Weiter, gehen Sie zum Firefox-Browser. Während der Verwendung von Firefox für den Suchbegriff funktioniert, es wird nur identifizieren, Firefox-Browser-nicht Firefox-basierten Browsern. Firefox enthält
Gecko
in seiner UA als Gecko ist der Motor, der es verwendet, und wir können daher Ziel. Durch die VerwendungGecko
, können wir erkennen, dass alle Browser die auf der Gecko-engine (ie SeaMonkey). Jedoch, viele Browser verwenden den Begrifflike Gecko
aus Gründen der Kompatibilität, also wir müssen sicher sein, zu entsprechenGecko
und nichtlike Gecko
.Bewegen auf, werden wir identifizieren Opera-Browser. Opera verwendet die
Presto
Motor am Ende des v12. Beginnend mit v15, begannen Sie mit dem Blink-engine wie Chrome. v12 und früher enthalten sind zwei einzigartige Wörter, die in der UA, die v15+ nicht--Opera
undPresto
. Du kannst entweder, wie Sie waren immer zusammen vorhanden. Für v15, Oper begann mitOPR
in der UA.Weiter oben ist Safari. Safari verwendet AppleWebKit als rendering-engine, aber wir können nicht nur den Gegner, weil Chrom umfasst auch
AppleWebKit
undSafari
in seiner UA aus Gründen der Kompatibilität. Daher müssen wir die Suche fürAppleWebKit
und nichtChrome
.Endlich bekommen wir Google Chrome. Chrome verwendet AppleWebKit bis v27. Mit der v28 Version, die Sie nach der Umstellung auf die Blink-engine. Wir konnten den Gegner beide Motoren, aber es würde eine Menge code. Wesen, das Chrom ist fast zum v70 nun, wir suchen für
Chrome
als es ist höchst unwahrscheinlich, jemand ist immer noch ein webkit-version von Chrome.Und nicht zuletzt Ihre fallback - /sonst.
Nun, ich verwendet css-Dateien verweisen, um die vendor-Präfix, um den Gegner hier. Fühlen Sie sich frei, um zu zwicken, als müssten Sie das tun, was Sie brauchen, es zu tun. Ich hoffe, dass dies geholfen.