Ich wollte mal einen Script schreiben, wo PHP überprüfen soll, welchen Browser man benutzt…
Das mit HTTP_USER_AGENT kenne ich ja und muss ich ja auch verwenden, da ich nciht genau wusste wie ich das jetzt am Sinnvollsten verwende habe ich gegoogelt und bin auf den script gestoßen
Soweit ist es ja auch eigendlich ganz logisch. Erst ist da ja die funktion get_browser und die wird aufgerufen… allerdings verstehe ich nicht ganz, was das hier alles soll…
Die Funktion eregi() benutzt zum Suchen nach einer Zeichenkette in einer weiteren sogenannte Reguläre Ausdrücke.
Das Thema ist relativ komplex, aber hier kann man sich ein wenig informieren.
Uih… reguläre Ausdrücke, ein Thema das ich gar nicht mag
Fangen wir mal mit dem einfachsten an, die Geschichte mit den normalen Klammern. Das sind bei den Suchmaschinen z.B. ganz einfache Alternativen, auf gut deutsch: Guck einfach mal, ob da irgendein Ausdruck passt.
.[0-9]+
Das ist auch noch ziemlich einfach, soviel ich weiß. Der Punkt wird mit dem \ maskiert (sagt man glaub ich so, oder doch escaped) damit der Punkt auch wirklich als Punkt im Suchausdruck gewertet wird. [0-9] heißt dass dann eine Ziffer von 0-9 kommen muss und das Plus am Ende ist der sogenannte Quantifizierer, das heißt dass die Ziffern 0-9 mindestens 1mal vorkommen muss und n-mal vorkommen kann.
/4.08
Und das ist eigentlich auch wieder einfach, hoffe ich. Das /4 ist einfach Teil des Suchstrings, z.B. Mozilla/4 dann wieder das . der Punkt wird escaped, d.h. dass der Punkt auch im Ausdruck sein muss und am Schluss muss die 08 auch noch im Ausdruck sein.
schaut es einfach ob es eine Version von MSIE ist, also z.B. 4.35
Werd mir dann noch mal beide Links anschaun.
Aber genau genommen brauche ich das ja dann nicht oder?
Wenn durch HTTP_USER_AGENT was mit MSIE 6.0 rauskommt und eregi das entdeckt ist es der IE 6.0 und wenn da Mozilla vorkommt, is es FF.
EDIT:
Das unter dem edit hat sich erledigt… habs einfach mal getestet
Bzw. wie überprüft den eregi.
Wenn jetzt mein HTTP_USER_AGENT rigendwas mit MSIE 6.0 rauskommt, reicht es wenn ich es dann
[PHP]eregi(‚MSIE 6‘,$user_agent);[/PHP]
so überprüfe? Dann müsste ja als ergebnis auch True rauskommen da ja MSIE 6 enthalten ist. Oder wird es nur true wenn es MSIE 6.0 heißt?
Ja, allerdings muss der Ausdruck nur auf einen Teil der Zeichenkette „matchen“.
Beispiel:
preg_match("#(\n{1})#","04523"); // => TRUE
Das {1} erlaubt ja nur eine Ziffer. Allerdings matcht der Ausdruck dann sozusagen auf alle Ziffern nacheinander.
Du gibst also einfach den ganzen HTTP_USER_AGENT - String mit.
Verstehe ich nicht…
Die ganzen dinge wie {1}, # sind doch bestimmt wieder regexp oder? mhhm muss ich mir wohl demnächst doch mal durchlesen… aber ich versteh trotzdem nicht wieso das true ist, er überprüft ja nur ob ein zeilenumbruch „\n“ drinne ist oder?
Okay, ich stell das dann noch um, thx.
Aber wenn wir jetzt eh schon bei RegExp sind, mach ich jetzt kein neues Thema auf…
Ich wollte jetzt noch HTTP_USER_AGENT überprüfen, ob ein „de“ vorkommt.
Da ich ja nicht möchte, dass in irgendeinem wort auch de vorkommt, braucht man ja die RegExp wieder.
Daher habe ich mir mal thuemmy link durchgelesen…
das es jetzt überprüft ob nur ein de vorkommt, dachte ich mir jetzt, ich muss ja einfach schauen, dass es mit einem
Naja, ist ja auch relativ logisch.
Du hast es selbst gesagt: Es müsste mit d anfangen und mit e aufhören. Damit wäre der einzige String der passt „de“.
So geht es also nicht.
Du kannst aber mittels \b die Wortgrenze bestimmen.
Ich würde übrigens diese Server-Variable verwenden, weil in HTTP_USER_AGENT nur die Sprache des Betriebssystems mitgegeben wird und nicht die, die im Browser eingestellt ist.
Ok thx, was du jetzt in preg_match benutzt sind auch RegExp oder?
Wenn ich bei mir in Opera die sprache umstelle, z.B: in englisch, dann ändert es beim aufruf von USER_AGENT das de in en
Wenn du ACCEPT_LANGUAGE verwendest kannst du genau so gut Stringfunktionen verwenden:
[php]substr($_SERVER[‚HTTP_ACCEPT_LANGUAGE‘], 0, 2) == ‚de‘[/php]
Oder, wenn’s irgendwo vorkommen kann, eben mit strpos.
Da is es ja eig dcoh egal oder?
[LEFT]$_SERVER[‚HTTP_ACCEPT_LANGUAGE‘][/LEFT]
gibt doch nur „de“ oder „en“ o. ä. an?
dann kann ich ja genauso[php] if(„de“ == $_SERVER[‚HTTP_ACCEPT_LANGUAGE‘])
[/php]
machen