XaraX: User_Agent auswerten

Beitrag lesen

Hallo Sven,

Da wirst du wohl nicht um die "regular expressions" drumrumkommen.

strpos und substr tuhen es auch.
regex sind unnötig.

da kann ich Raik nur beipflichten. M. E. sollte man um jeden Preis nach anderen Lösungen suchen, Reguläre Ausdrücke sind nicht einfach zu handhaben, was eine Anpassung erschweren kann, und werden vergleichsweise langsam interpretiert.

Marc hatte es schon angesprochen, das der USER_AGENT nicht mehr als eine Zeichenkette ist, die verändert werden kann. Aus dieser Überlegung heraus stellt sich daher natürlich die generelle Frage: Macht es dann Sinn? Webalizer, (das vermutlich bekannteste Logdatenauswertungstool) beispielsweise analysiert den USER_AGENT; aber die Frage mußt Du Dir selbst beantworten.

Aufbau des String "USER_AGENT":

$string            =$string_produkt.$string_erweiterung;
$string_produkt    =$string_gruppe.$string_version;
$string_erweiterung=$string_kommentar.$string_anhang;

Ein Beispiel:

Opera/7.54 (Windows NT 5.1; U)  [de]
    ^                    ^
  produkt ,         erweiterung

Anzumerken ist, daß nicht alle USER_AGENTs einen Anhang mitliefern. Man darf als stillschweigenden Standard annehmen, daß

- $strin_produkt keine Leerzeichen enthält,
  - $strin_produkt sich immer von $string_erweiterung durch ein Leerzeichen abtrennt

Jedoch sollte man sich dessen nie sichersein und wie in jedem Programm abprüfen, ab die zur Programmierungszeit umgestzten Annahmen auch eingetreten sind. Dies werde ich nicht extra machen.

$a=explode(' ',$string,2);
$string_produkt    =$a[0];
$string_erweiterung=$a[1];

Man darf als stillschweigenden Standard annehmen, daß

- $string_gruppe sich immer von $string_version durch ein Leerzeichen abtrennt

$b=explode('/',$string_produkt,2);
$string_gruppe =$b[0];
$string_version=$b[1];

Man darf als stillschweigenden Standard annehmen, daß

- $string_kommentar immer in Klammern (chr(40).$string_kommentar.chr(41)) steht
  - $string_kommentar keine Klammern enthält

$c=explode(')',str_replace('(','',$string_erweiterung),2);
$string_kommentar=$c[0];
$string_anhang   =trim($c[1]);

Man darf als stillschweigenden Standard annehmen, daß

- $string_kommentar sich durch semikolongetrennte Substrings unterteilt

$string_kommentar=explode(';',$string_kommentar);

Welche Möglichkeiten es gibt, kannst Du auf zwei wegen herausfinden:

1. Spezifikationen aller Clientsoftware studieren
  2. Logdaten auswerten und Übereinstimmungen zusammenfassen

Gruß aus Berlin!
eddi