• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Browserversion abfragen

Tronjer

Senior HTML'ler
Ich versuche mit folgendem Script die Browserversion des IE abzufragen.
PHP:
<?php
$browser = $_SERVER['HTTP_USER_AGENT'];
echo substr($browser, 25, 8) . '<br />';

if (preg_match('/\ssubstr($browser, 25, 8)/', $browser) == 'MSIE 7.0') {
    echo 'Internet Explorer 7';
} else {
    echo 'anderer Browser';
}

?>

Auch wenn der Substring nicht MSIE 7.0 entspricht, wird trotzdem nicht die else Ausgabe ausgeführt.
PHP:
MSIE 9.0
Internet Explorer 7

Was mache ich hier falsch? :(
 
Zuletzt bearbeitet:
Das Suchmuster ist falsch. Du willst hier wissen, ob in $browser irgendwo ein leeres Zeichen vorkommt, gefolgt von der Zeichenkette substr gefolgt von dem Inhalt von $browser gefolgt von der Zeichenkette ", 25, 8".
Das ist wahrscheinlich nicht, dass was du willst.
Es wäre hilfreich, wenn du sagen würdest, was du erreichen willst.
 
Ich habe mein posting noch mal korrigiert, aber es funktioniert trotzdem nicht.

Was ich erreichen möchte: Wenn ein User den IE7 verwendet, soll eine bestimmte Aktion ausgeführt werden.

/edit: auch wenn ich beim Suchstring den whitespace (\s) weglasse und den Operator auf identisch (===) setze, erhalte ich immer noch nicht mein gewünschtes Ergebnis. :(
 
Zuletzt bearbeitet:
Hier gibt es eine prima Vorlage dafür, musst Du nur noch um die "7" ergänzen:
How to detect Internet Explorer with PHP

Dank, das funktioniert. :)

Aber noch mal zu der preg_match() Frage, an einem vereinfachten Beispiel:

PHP:
$mein_text = 'Ein beliebiger Textstring';

echo substr($mein_text, 4, 10) . '<br />';

if (preg_match('/substr($mein_text, 4, 10)/', $mein_text) == 'beliebiger') {
    echo 'Suchmuster gefunden';
} else {
    echo 'nicht gefunden';
}

if (preg_match('/substr($mein_text, 4, 10)/', $mein_text) == 'Text') {
    echo 'Suchmuster gefunden';
} else {
    echo 'nicht gefunden';
}

Hier erhalte ich für beide Abfragen die Ausgabe: Suchmuster gefunden, obwohl ich den Substring beim ersten mal mit beliebiger und beim zweiten mit Text vergleiche. Setze ich den Operator hingegen auf identisch (===) lautet die Ausgabe: nicht gefunden.

Wo ist da die Logik?
 
Schau nochmal genau nach was preg_match für Rückgabewerte liefert:
PHP: preg_match - Manual

Rückgabewerte sind 0 oder 1, die dann als true oder false ausgewertet werden.

Ich habe das Beispiel hier noch mal umgeschrieben und sollte doch eigentlich für alle drei Abfragen das selbe Ergebnis erhalten. Trotzdem wird bei der dritten Abfrage die else Bedingung ausgegeben und das ist für mich nicht schlüssig.
PHP:
<?php 
$haystack =  "Ein beliebiger Textstring";
$needle = substr($haystack, 4, 10);

// Es wurde eine Übereinstimmung gefunden.
if (preg_match("/beliebiger/", $haystack)) {
   echo "Es wurde eine Übereinstimmung gefunden.";
} else {
   echo "Es wurde keine Übereinstimmung gefunden.";
}

// Es wurde eine Übereinstimmung gefunden.
if (preg_match("/$needle/", $haystack)) {
    echo "Es wurde eine Übereinstimmung gefunden.";
} else {
    echo "Es wurde keine Übereinstimmung gefunden.";
}

// Es wurde keine Übereinstimmung gefunden.
if (preg_match("/substr($haystack, 4, 10)/", $haystack)) {
    echo "Es wurde eine Übereinstimmung gefunden.";
} else {
    echo "Es wurde keine Übereinstimmung gefunden.";
}
?>

edit: Das Synax-Highlighting hat den Fehler gezeigt. :oops:

Ich muss es so schreiben:
PHP:
if (preg_match("/".substr($haystack, 4, 10)."/", $haystack))[
....
}
 
Zuletzt bearbeitet:
Zurück
Oben