Geschrieben von: Christian Holm
Kategorie: ASP Grundlagen
This printed page brought to you by AlphaSierraPapa
Bei Datenbankabfragen oder Webseitennavigation über Querystrings enthalten diese Strings meist URL-encodierte Zeichen (hexadezimale, zweistellige ASCII Codes), mit denen client-seitige Forms nichts anfangen können. Wenn Sie also die im Querystring abgelegten Informationen in Forms weiterverarbeiten möchten, müssen Sie diese Zeichen "decodieren". Dieser Artikel zeigt Ihnen eine server-seitige Lösung wie Sie dieses Problem angehen können.
Wenn man Request.QueryString(Variablenname) aufruft, so wird die Decodierung automatisch von ASP für uns durchgeführt. Greift man selbst auf den Querystring zu, dann steht man vor dem heute thematisierten Problem: es gibt keine eingebaute Funktion zum decodieren eines individuellen Querystrings.
Das hier präsentierte Script (erstellt von Christian Mairoll) ist quasi die umgekehrte Aktion der Server.URLEncode Methode. Es generiert z.B. aus dem URL-encodeten String http%3A%2F%2Fwww%2Easpheute%2Ecom den u.a. auch für Forms lesbaren String http://www.aspheute.com.
Sehen wir uns das Script einmal näher an. Beginnen wir mit der server-seitigen Funktion DecodeURL:
Function DecodeURL(strQuery) strQuery = Replace(strQuery, "+", " ") arTeile = Split(strQuery, "%") y = 0 For Each strTeil In arTeile y = y + 1 If y > 1 Then Teil1 = Left(strTeil, 2) Teil2 = Mid(strTeil, 3) x = "&H" & Teil1 x = CInt(x) strQueryString = strQueryString & Chr(x) & Teil2 Else strQueryString = strQueryString & strTeil End If Next DecodeURL = strQueryString End Function
Zuerst werden aus dem der DecodeURL Funktion übergebene Querystring (strQuery) die Pluszeichen (+) herausgesucht und durch die Replace Function durch ein Leerzeichen ersetzt. Pluszeichen in Querystrings entsprechen normalen Wortabständen und keiner boolschen Addition (AND). D.h. würde im Querystring "Active+Server+Pages" stehen, würde das einfach Active Server Pages bedeuten.
Als nächstes werden die zweistelligen hexadezimalen ASCII Code Zeichen in ihre äquvivalenten Sonderzeichen umgewandelt. Vor jedem einzelnen zweistelligen ASCII Zahlencode, der ein Sonderzeichen repräsentiert, erfolgt immer eine Trennung mit einem Prozentzeichen (%). Daher liegt es nahe, mit der Split Function zuerst die einzelnen Zeichen des Querystrings (strQuery) - vor der Umwandlung in ihr Äquvivalent - zu trennen bzw. zu gruppieren. Da die Split Function ein Array zurück gibt, weisen wir ihr auch ein Array (arTeile) zu.
Im For ... Each Statement werden, falls mit einem Prozentzeichen getrennte Sonderzeichen (die ja noch in Form eines hexadezimalen ASCII Codes vorhanden sind) gefunden wurden, umgewandelt. Um die Umwandlung durchführen zu können suchen wir uns vorerst mit Hilfe der Left Function die vorher getrennten zweistelligen ASCII Codes aus dem Array heraus. Diese herausgesuchten Zahlencodes werden dann mit dem Präfix &H versehen um das hexadezimale Zahlensystem zu signalisieren. Danach werden sie mit der CInt Funktion in ihre Integerwerte umgerechnet.
Die Umrechnung in Integerwerte hat den Sinn, daß man sie der Chr Function übergeben kann. Die Chr Function gibt dann das entsprechende - nun lesbare - Sonderzeichen zurück. Für den Fall, daß der Querystring neben den Sonderzeichen auch andere bzw. nur normale Zeichen (z.B Buchstaben) enthält tritt die Alternative der If-Verzweigung in Kraft.
Was noch fehlt ist die Kombination mit einem client-seitigen Formular. Dies ist der Einfachheit halber sehr simpel gehalten:
<form method=GET> String mit Sonderzeichen eingeben: <input type="text" name="Eingabe"> <input type="submit" value="OK"> </form>
Wenn Sie diese Beispieldatei (DecodeURL.asp) auf einem Web Server ablaufen lassen, sowie der Function einen Querystring übergeben, so erhalten Sie folgendes Resultat (mit dem essentiellen Teil des Querystings in der Adresszeile):
Das gezeigte Beispielscript zeigt eine simple Methode wie man einen kryptischen Querystring der aus Sonderzeichen in Form von ASCII Codes besteht wieder in die u.a. auch für Forms verständliche Art konvertiert.
This printed page brought to you by AlphaSierraPapa
Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20010404.zip
Überprüfen von HTML-Formularen mit ASP
http:/www.aspheute.com/artikel/20000522.htm
Auswertung von HTML Formularen mit ASP
http:/www.aspheute.com/artikel/20000406.htm
Einfache String Operationen
http:/www.aspheute.com/artikel/20000503.htm
©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.