
15 August 2009, 13:44 von
klaus_b1613 mal gelesen.Wer sein Blog mit Blogengine.NET betreibt und auch einmal die Suche mit Ausdrücken gefüttert hat die Sonderzeichen enthalten, wird beim Blättern durch die Ergebnisse bestimmt auch auf folgende Unart gestoßen sein: Beim neubilden der URL schneidet Blogengine.NET die Zeichenfolge ab dem Sonderzeichen einfach ab. Nehmen wir als Beispiel einmal den Ausdruck C#. Bei der Eingabe in die Suchmaske und der Ausgabe auf der Ergebnisseite geht noch alles glatt. Sobald aber auf den Link einer weitere Ergebnisseite geklickt wird, erscheint nur noch der Buchstabe C als Ausdruck zur Abfrage. Das Rautenzeichen # und alles was darauf folgt wird einfach entfernt.
Woher kommt dieses Verhalten? Die Lösung ist mehr als simpel: an der falschen Kodierung der Abfragezeichenfolge aus dem QueryString.
Blogengine.NET kodiert den QueryString mit der Methode HtmlEncode zum zurücksenden an den Server. Besser geeignet ist hier die Methode UrlEncode. Wie der Name schon sagt, kodiert diese Methode eine Zeichenfolge zur Verwendung in einer URL.
Mit folgender kleinen Anpassung in der privaten Methode BindPaging der Klasse search,zu finden im Wurzelverzeichnis der Anwendung, lässt sich dieses unschöne Verhalten beheben:
//a.HRef = "?q=" + Server.HtmlEncode(Request.QueryString["q"]) + comment + "&page=" + (i + 1);
a.HRef = "?q=" + Server.UrlEncode(Request.QueryString["q"]) + comment + "&page=" + (i + 1);
Leider habe ich keine andere Möglichkeit gefunden das Verhalten der Suche zu ändern, als die direkte Änderung im Quelltext.
Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war, bitte "kicken" sie ihn.
