Это один из способов. Это может работать с электронной почтой, потому что мы все знаем, что адреса электронной почты не могут содержать пробелы.
Однако, когда речь идет о других строковых значениях, которые не имеют строгих правил, таких как электронные письма, некоторые из них, которые могут иметь + и пробелы, будут в конечном итоге декодированы как пробелы. Таким образом, вы не сможете определить, какой из них следует заменить знаком плюса.
ASP.NET автоматически вызывает UrlDecode () при доступе к свойству по индексу ключа (т. Е. (Request.QueryString ["key")]). https://stackoverflow.com/a/13095475/2289769
Возьмем следующий пример:
Строка, переданная в браузер
spacebetween=Q Q&pluscharbetween=Q+Q&encodedpluschar=Q%2BQ
QueryString, закодированная браузером
spacebetween=Q%20Q&pluscharbetween=Q+Q&encodedpluschar=Q%2BQ
Интерпретируется ASP (Request.QueryString.ToString ()):
spacebetween=Q+Q&pluscharbetween=Q+Q&encodedpluschar=Q%2bQ
UrlDecoded () ASP
spacebetween: Q Q
pluscharbetween: Q Q
encodedpluschar: Q+Q
С учетом вышесказанного лучше всего кодировать любое строковое значение, переданное браузеру, если вы хотите его получитьобратно точно так, как есть.
Вы можете провести свой собственный тест:
<h4>UrlDecoded()</h4>
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
<h4>Without Decoding()</h4>
<asp:Label ID="Label2" runat="server" Text=""></asp:Label>
If Request.QueryString.ToString().Length > 0 Then
For Each key As String In Request.QueryString.Keys
If Request.QueryString.Get(key).Length > 0 Then
Label1.Text &= String.Format("{0}: {1}<br />", key, Request.QueryString.Get(key))
End If
Next
Dim items As String() = Request.QueryString.ToString().Split("&".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
For Each item In items
Dim key = item.Split("=")(0)
Dim value = item.Split("=")(1)
Label2.Text &= String.Format("{0}: {1}<br />", key, value)
Next
End If