PHP: Browser-Versionsnummer User-Agent mit Version / x.x.x (Safari & Opera)

7

Ich habe eine einfache Klasse geschrieben, um zu überprüfen, ob Benutzeragenten eine Warnung für inkompatible Browser anzeigen. Ich mache diese Serverseite, ich weiß, dass es möglich ist, Client-Seite.

Okey zuerst, ich bin nicht viel gut für das Schreiben von Regexes ..

Ich habe eine Regex geschrieben, die nach Kleinbuchstaben sucht, gefolgt von der Versionsnummer. Ich mache ein foreach() mit einem Array etwas wie das:

%Vor%

Dies würde ergeben: Browser: "Firefox", version "23.0.6" .

Ich fand das funktioniert für Firefox, MS IE und ältere Versionen von Opera. Einige Browser wie Safari und die neueren Versionen von Opera haben jedoch eine andere User-Agent-Zeichenfolge, die Version / x.x.x enthält, also

Nur um Ihnen eine Idee zu geben, hier sind 3 User-Agent-Strings und was ich brauche ist hervorgehoben.

  1. Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/536.30.1 (KHTML, like Gecko) Version/6.0.5 Safari/536.30.1
  2. Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
  3. Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14

Also in jeder von diesen die folgende menschliche Logik richtig:

  • Wenn in der Zeichenfolge die Versionsnummer Version/x.x.x ist.
  • Wenn nicht, dann ist Browsername/x.x.x die Versionsnummer.

Wenn Sie sich die erste und letzte User-Agent-Zeichenfolge oben ansehen, sehen Sie, dass Version vor oder nach dem Browser-Namen stehen kann.

Kann mir jemand helfen, eine Regex für preg_match() zu erstellen? Muss ich eine bedingte Anweisung verwenden oder kann ich nach optionalen Gruppierungen suchen? Ich bin ein bisschen verwirrt ..

Danke!

Bearbeiten 17-09-2013: Ich habe vergessen zu erwähnen, dass ich nicht get_browser() verwenden möchte, sondern eine riesige Bibliothek verwendet, um die Fähigkeiten des Browsers zu erkennen usw. Ich brauche nur eine kurze "Whitelist" von Browsern, die einige Millisekunden anstatt ein paar hundert ms benötigen sollte, um die browse cap.ini Dateien zu lesen. Sonst wäre Georges Antwort die Antwort ..

    
Chris 15.09.2013, 23:02
quelle

4 Antworten

6

Habe es etwas anders gemacht, da ich mit Remus 'Antwort einige Browser Probleme hatte.

%Vor%     
Chris 24.01.2014, 15:17
quelle
6

Angesichts Ihrer handvoll Ergebnisse funktioniert das. Es wird vielleicht nicht in allen Fällen, aber es wird Ihre Bearbeitungszeit drastisch reduzieren.

Ich würde einen einzigen regulären Ausdruck verwenden, um die Version zu extrahieren:

%Vor%

Und da Sie nur nach einer Handvoll exakter Zeichenketten suchen, können Sie php's stripos() verwenden, um nach der Browser-Zeichenkette zu suchen.

%Vor%

Die Vorteile einer solchen Vorgehensweise sind unmittelbar:

  • Sie müssen das useragent nicht mehrfach mit dem regulären Ausdruck testen.
  • stripos() ist bei der Verarbeitung von regulären regulären Ausdrücken wesentlich schneller.

Sie können hier auch mit der Regex herumspielen: Ссылка

    
brandonscript 14.01.2014 07:48
quelle
4

Haben Sie schon von browscap gehört und get_browser() ? Bei meiner Installation:

%Vor%

Um es zu benutzen, schnappen Sie sich eine Kopie einer PHP-Version von browscap.ini von hier (zB php_browscap.ini ), Referenz es in php.ini unter der browscap Direktive, und du bist gut zu gehen.

    
George Brighton 15.09.2013 23:04
quelle
4

Diese Klasse / Funktion macht einen schönen Job:

%Vor%

Ich habe das mit einem iPhone und einer Oper getestet. Gleichzeitig erhalten Sie das Betriebssystem, auf dem der Browser läuft.)

Bearbeiten:

Ich kann sehen, dass diese Funktion ein eigenes Git Repo hat. Verwenden Sie dies, wie dies aktualisiert und gepflegt wird:

Ссылка

    
dennis 16.01.2014 14:10
quelle

Tags und Links