Plus-Zeichen im query-string für die ASP.NET Website
Ich vor einigen Jahren erstellte ich eine Datenbank driven ASP.NET Website, die verwendet eine einzelne APSX Seite für die Anzeige der Seiten. Also alle URLs der Seite sind im folgenden format:
/main.aspx?page=Page+Title+One
/main.aspx?page=Another+Article+Title
/main.aspx?page=Third+Page
Den main.aspx-Seite wird der query-string-Daten (Seite+Titel+zum Beispiel), und verwendet Sie als einen Schlüssel zu ziehen, der entsprechende Artikel Inhalt von der SQL server-Datenbank. Der eigentliche Titel der Seite ist gespeichert in der db mit Leerzeichen anstelle der Pluspunkte (zum Beispiel "Titel Seite Eins").
Die Entscheidung zu gehen mit der " + " - Zeichen als Wort-Trennzeichen in der URL-query-string ist verursacht viele Probleme mit Suchmaschinen in letzter Zeit (duplicate content, etc.), so möchte ich, um es zu beheben, aber ohne änderung der URLs.
Was ich tun möchte, ist bei der Suchmaschinen oder Besucher besuchen will, die falsche URL fehlt das + Zeichen und mit Leerzeichen, anstatt, zum Beispiel:
/main.aspx?page=Page Title One
Will ich tun, 301 permanent redirect zu:
/main.aspx?page=Page+Title+One
In der Lage sein, dies zu tun brauche ich, um zu überprüfen, ob der query-string-Wert Plus oder Leerzeichen, aber wenn ich den Wert mit der Anforderung.QueryString["Seite"] auch wenn der tatsächliche quesry string Pluspunkte in es ich bekomme immer noch string mit Leerzeichen "- Seite-Titel Ein".
Die site läuft auf IIS6/Win 2003.
Wie kann ich dies tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, natürlich, Sie können nicht einen Raum in einem URI in jedem Fall. Was können Sie tun, ist
%20
im die ist die Weise zu Kodieren eine Raum an jeder Stelle in einem URI sowie+
als die normale Art und Weise zu Kodieren, die einen Raum in der Abfrage-Teil und der empfohlene Weg, dies zu tun in diesem Teil von es, da %20 Probleme verursachen können.Wegen dieses ist eine implementaiton detail application/x-www-form-urlencoded und wir normalerweise kümmern sich die eigentlichen Daten gesendet,
Request.QueryString[]
funktioniert das unescaping für Sie, drehen beide+
und%20
in einen Raum.Den Sie betrachten möchten, die
Request.RawUrl
(gibt einen string zurück) oderRequest.Url
das gibt einenUri
. Die wohl einfachste ist, um zu fütternRequest.Url
in eineUriBuilder
so können Sie ändern Sie die Abfrage, und erhalten eineUri
zurück.Immer noch, würde ich empfehlen, den entgegengesetzten Ansatz, wenn Sie Probleme mit duplicate content durch die zwei Möglichkeiten der Codierung einem Leerzeichen in der Abfrage-string, gehen Sie mit der empfohlenen norm und drehen die Fälle von
%20
in+
anstatt die andere Weise herum.Mit
Request["key"]
, es konvertiert automatisch alle " + " - Zeichen in Leerzeichen. Sie benötigenRequest.RawUrl
zu sehen, ob es plus-Zeichen.Darüber hinaus können Sie
System.Web.HttpUtility.ParseQueryString
zu analysieren beliebige Zeichenfolge Abfragen.Sie können einfach testen, ob
Request.QueryString.ToString().Contains("+")
ist wahr, und tun logic von dort.Request.QueryString.ToString().Contains("+")
geben Sie, wenn es im ersten oder zweiten Fall..Replace("+", " ")
die gesamte Zeichenfolge in das Ende?Den
+
Zeichen interpretiert wird, als ein Raum für URLs.Ist, um zu URL-codieren, einen Raum, den Sie verwenden könnten
%20
oder eine+
.Sehen diese SO beantworten zu "URL-Kodierung der Leerzeichen: + oder %20?"
Können Sie versuchen, diese :