Toon posts:

[ASP.NET] met Reguliere Expressies de browser naam vinden

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben voor mezelf lekker aan het prutsen. Nu wil ik voor mijn eigen site een statistieken site-je maken. Naar aanleiding van Request.ServerVariables("HTTP_USER_AGENT") wil ik achter de browser naam komen. een voorbeeldje:

bij IE6 krijg je terug de string "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1". Naar aanleiding daarvan maak ik er MS Internet Explorer 6.0 van.
bij Firefox krijg je de string "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0". Naar aanleiding daarvan maak ik er dan Mozilla Firefox 1.0

Alleen ik zit nu al ongeveer 2 dagen te prutsen en te zoeken hoe ik dit kan oplossen met reguliere expressies. Ik heb ook een array met de meest voorkomende browsers en waarin ze moeten worden omgezet.

Ik probeer dit een beetje te jatten >:) van PHP maar ik kan het niet omzetten. In PHP is de code alsvolgt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
if (preg_match( "/msie[\/\sa-z]*([\d\.]*)/i", $agent, $m ) && !preg_match( "/webtv/i", $agent ) && !preg_match( "/omniweb/i", $agent ) && !preg_match( "/opera/i", $agent )) {
        // IE
        return "MS Internet Explorer $m[1]";
    } else if (preg_match( "/netscape.?\/([\d\.]*)/i", $agent, $m )) {
        // Netscape 6.x, 7.x ...
        return "Netscape $m[1]";
    } else if ( preg_match( "/mozilla[\/\sa-z]*([\d\.]*)/i", $agent, $m ) && !preg_match( "/gecko/i", $agent ) && !preg_match( "/compatible/i", $agent ) && !preg_match( "/opera/i", $agent ) && !preg_match( "/galeon/i", $agent ) && !preg_match( "/safari/i", $agent )) { 
        // Netscape 3.x, 4.x ...
        return "Netscape $m[2]";
    } else {
        // Other
        $found = false;
        foreach ($browserSearchOrder as $key) {
            if (preg_match( "/$key.?\/([\d\.]*)/i", $agent, $m )) {
                $name = "$browsersAlias[$key] $m[1]";
                return $name;
                break;
            }
        }
    }


kan iemand me opweg helpen?
p.s. sorry voor het verneuken van de layout :P

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
http://www.google.nl/sear...ns&btnG=Google+zoeken&lr=
http://www.google.nl/sear...ser+agent&btnG=Zoeken&lr=
p.s. sorry voor het verneuken van de layou
Gebruik je de oude nog dan?

Noushka's Magnificent Dream | Unity


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Verwijderd schreef op woensdag 19 januari 2005 @ 17:43:
[...]


ja gebruik de oude nog ja .. kan nog niet echt wennen aan de nieuwe.
Maar heb je iets kunnen vinden op Google?

Noushka's Magnificent Dream | Unity


  • André
  • Registratie: Maart 2002
  • Laatst online: 11-05 16:42

André

Analytics dude

Kun je voor dit simpele vergelijken niet beter werken met Instr? En hou je er rekening mee dat de Useragent vervalst/veranderd kan worden? En volgens mij staat er tussen de ServerVariables ook wel een Appname oid :)

  • Rickets
  • Registratie: Augustus 2001
  • Niet online

Rickets

Finger and a shift

http://msdn.microsoft.com...gurationfileforsample.asp
Hier staat een voorbeeldje van een web.config, met daarin de nodige browserdetectie zaken. Die kan je vast wel gebruiken en/of aanpassen. In je code kan je dan de Browser property van je request uitlezen.
André schreef op woensdag 19 januari 2005 @ 19:37:
Kun je voor dit simpele vergelijken niet beter werken met Instr? En hou je er rekening mee dat de Useragent vervalst/veranderd kan worden? En volgens mij staat er tussen de ServerVariables ook wel een Appname oid :)
Instr is geen onderdeel van het .Net framework, maar een Visual Basic functie. Dan kan je nog beter IndexOf gebruiken.

[ Voor 3% gewijzigd door Rickets op 19-01-2005 20:40 ]

If some cunt can fuck something up, that cunt will pick the worst possible time to fucking fuck it up, because that cunt’s a cunt.


Verwijderd

Topicstarter
ik wil graag mooie namen laten zien zoals MS Internet Explorer 6.0 en Mozilla Firefox 1.0 etc.

Ik heb het al voor elkaar moet ik zeggen. Ik heb het alsvolgt gedaan:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
If Regex.IsMatch(myAgent, "msie\s\d\.\d", RegexOptions.IgnoreCase) And Not Regex.IsMatch(myAgent, "webtv", RegexOptions.IgnoreCase) And Not Regex.IsMatch(myAgent, "omniweb", RegexOptions.IgnoreCase) And Not Regex.IsMatch(myAgent, "opera", RegexOptions.IgnoreCase) Then
            'IE
            browser = "MS Internet Explorer " & Request.Browser.Version
        ElseIf Regex.IsMatch(myAgent, "Netscape\s\d\.\d", RegexOptions.IgnoreCase) Then
            'Netscape 6.x, 7.x ...
            browser = "Netscape " & Request.Browser.Version
        ElseIf Regex.IsMatch(myAgent, "mozilla\s\d\.\d", RegexOptions.IgnoreCase) And Not Regex.IsMatch(myAgent, "gecko", RegexOptions.IgnoreCase) And Not Regex.IsMatch(myAgent, "compatible", RegexOptions.IgnoreCase) And Not Regex.IsMatch(myAgent, "opera", RegexOptions.IgnoreCase) And Not Regex.IsMatch(myAgent, "galeon", RegexOptions.IgnoreCase) And Not Regex.IsMatch(myAgent, "safari", RegexOptions.IgnoreCase) Then
            'Netscape 3.x, 4.x ...
            browser = "Netscape " & Request.Browser.Version
        Else
            For iTeller = LBound(arrBrowsers) To UBound(arrBrowsers)
                If Regex.IsMatch(myAgent, arrBrowsers(iTeller), RegexOptions.IgnoreCase) Then
                    browser = arrBrowsersRepl(iTeller) & " " & Regex.Match(myAgent, "\d\.\d$").ToString
                    Exit For
                End If
            Next
        End If


Ik weet niet of hij het echt goed doet, maar IE en Firefox detecteert hij goed.

Ik heb trouwens nog een probleem met de global.asax. Ik heb deze in de root van mn site gezet (wordt gehost) en roep een test webform (test.aspx) aan. Alles wordt gaat goed dus heb ik de index.html vernoemd naar index.aspx. Maar als ik dan de pagina open dat wordt de code opeens niet meer uitgevoerd. Heel vreemd. Heb de pagina ook al default.aspx genoemd. Moet je ergens declareren dat het een web applicatie betreft oid?
ik moest er even
code:
1
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
boven zetten.

[ Voor 8% gewijzigd door Verwijderd op 19-01-2005 20:58 ]


  • Rickets
  • Registratie: Augustus 2001
  • Niet online

Rickets

Finger and a shift

Verwijderd schreef op woensdag 19 januari 2005 @ 20:55:
ik moest er even
code:
1
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
boven zetten.
Die constructie is voor ASP. Je moet namelijk @Page directives gebruiken. Bv.
code:
1
<%@Page Language="VB"%>

Hetzelfde geldt voor de taal. Je moet niet gaan vbscript'en (LBound/UBound/etc) als je asp.net gebruikt.

If some cunt can fuck something up, that cunt will pick the worst possible time to fucking fuck it up, because that cunt’s a cunt.


Verwijderd

Topicstarter
Rickets schreef op woensdag 19 januari 2005 @ 21:17:
Die constructie is voor ASP. Je moet namelijk @Page directives gebruiken. Bv.
code:
1
<%@Page Language="VB"%>

Hetzelfde geldt voor de taal. Je moet niet gaan vbscript'en (LBound/UBound/etc) als je asp.net gebruikt.
Je bedoeld zeker de Regex.Match of niet?
Pagina: 1