4 Stimmen

Querystring Problem in C# mit Sonderzeichen

Ich bin auf ein sehr seltsames Problem gestoßen, bei dem mein Abfragestring "++" als Teil des Textes enthielt. Aber wenn ich den Abfragestring-Wert einer Zeichenfolge zuweise, werden ++ zu zwei Leerzeichen. Wie bekomme ich genau das, was als Abfragestring übergeben wird?

Ich habe festgestellt, dass die Abfragezeichenfolge "++" enthielt, aber wenn ich Request.QueryString["search"].ToString() ausführe, verschwindet "++", ich habe im Direktfenster nachgeschaut.

Ich benutze C# 2.0

URL: /default.aspx?search=test++

string t = Request.QueryString["search"].ToString();

8voto

Chuck Callebs Punkte 15993

Sie sollten UrlEncode und UrlDecode verwenden

Diese Methoden sollten jedes Mal verwendet werden, wenn Sie Benutzereingaben in die Abfragezeichenfolge einfügen.

4voto

'+' ist in Abfragezeichenfolgen reserviert.

Innerhalb eines Abfragebestandteils sind die Zeichen ";", "/", "?", ":", "@", "&", "=", "+", ",", und "$" reserviert.

Versuchen Sie, UrlEncode zu verwenden, um Ihre Abfragezeichenfolgen zu codieren.

3voto

Adam Robinson Punkte 176996

Ein Pluszeichen in einer Abfragezeichenfolge wird in ein Leerzeichen übersetzt. Wenn Sie tatsächlich ein Pluszeichen anstelle eines Leerzeichens möchten, verwenden Sie stattdessen %2B.

/default.aspx?search=test%2B%2B

Wenn Sie dies im Code machen, dann sollten Sie UrlEncode verwenden, um diesen Teil der Abfragezeichenfolge zu codieren.

1voto

StriplingWarrior Punkte 141402

Ich weiß nicht, ob es einen Weg gibt, um den genauen Text, der an die Abfrage übergeben wird, zu erhalten. Die HTTP-Standards besagen im Grunde, dass ein + einem Leerzeichen entspricht, also wenn Sie das + beibehalten möchten, sollten Sie die Abfragezeichenfolge Codieren, wie Chuck gesagt hat.

0voto

Die einzige Lösung, die ich gefunden habe, befindet sich in diesem Beitrag HIER:

private string GetQueryStringValueFromRawUrl(string queryStringKey)
{
    var currentUri = new Uri(HttpContext.Request.Url.Scheme + "://" +
                   HttpContext.Request.Url.Authority +
                   HttpContext.Request.RawUrl);
    var queryStringCollection = HttpUtility.ParseQueryString((currentUri).Query);
    return queryStringCollection.Get(queryStringKey);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X