Подтвердить что ты не робот

ASP.Net URLEncode Амперсанд для использования в Query String

Мне нужно перенаправить на URL-адрес, передавая параметр в виде строки запроса.

Это может включать значение Амперсанда в значении. таких как

string value = "This & That";
Response.Redirect("http://www.example.com/?Value=" + Server.UrlEncode(value));

Это возвращает http://www.example.com/?Value=This+&+That

Что я должен использовать для кодирования этой строки?

EDIT: Благодаря Люку за то, что он указывает на очевидное, код действительно работает правильно. Я извиняюсь, мой вопрос был недействительным вопросом в конце концов!

На странице у меня было много старого устаревшего кода, который, по-видимому, делает своеобразное кодирование и декодирование, и он выглядит так, как будто мой urlencode не работает.

Моим решением, к сожалению, является полностью отказаться от использования a и до тех пор, пока код, о котором идет речь, не может быть переписан. Вы не просто ненавидите старый код!

4b9b3361

Ответ 2

Технически:

value = value.Replace("&", "%26") 

сделает трюк.

EDIT: Кажется, есть некоторые сложные проблемы со всеми методами UrlEncode/HttpEncode, которые не совсем делают трюк. Я написал простой способ, который может оказаться полезным. Это должно охватывать все основные проблемы с кодировкой, а также легко написать "дезактиватор".

Protected Function SanitizeURLString(ByVal RawURLParameter As String) As String

      Dim Results As String

      Results = RawURLParameter    

      Results = Results.Replace("%", "%25")
      Results = Results.Replace("<", "%3C")
      Results = Results.Replace(">", "%3E")
      Results = Results.Replace("#", "%23")
      Results = Results.Replace("{", "%7B")
      Results = Results.Replace("}", "%7D")
      Results = Results.Replace("|", "%7C")
      Results = Results.Replace("\", "%5C")
      Results = Results.Replace("^", "%5E")
      Results = Results.Replace("~", "%7E")
      Results = Results.Replace("[", "%5B")
      Results = Results.Replace("]", "%5D")
      Results = Results.Replace("`", "%60")
      Results = Results.Replace(";", "%3B")
      Results = Results.Replace("/", "%2F")
      Results = Results.Replace("?", "%3F")
      Results = Results.Replace(":", "%3A")
      Results = Results.Replace("@", "%40")
      Results = Results.Replace("=", "%3D")
      Results = Results.Replace("&", "%26")
      Results = Results.Replace("$", "%24")

      Return Results

End Function

Ответ 3

Другим персонажем, которому нужно ускользнуть, является апостроф. Замените его% 27.

string url = Server.UrlEncode(value).Replace("'", "%27);

HttpUtility.UrlEncode() И Server.UrlEncode() не заменяют этот символ вместе с несколькими другими для обратной совместимости с другими .Net Framework. Подробнее см. В этой статье Microsoft: http://connect.microsoft.com/VisualStudio/feedback/details/214349/httputility-urlencode-does-not-encode-apostrophe

Ответ 4

это правильно, однако, если в строке запроса есть несколько параметров.

например: & firstname = bob & secondName = "Tracy and John"

Ответ 5

Вы должны использовать Server.UrlEncode(string containing the ampersand).

Я только что протестировал его, и строка возвращаемого запроса была правильно закодирована и затем расшифрована.

HttpUtility не работал для этой операции.

Ответ 6

И если вы получаете значение от GridView, & ampersand может отображаться как "&amp;":

row.Cells[4].Text.ToString() = xxxx&amp;

Итак, в этом случае вы захотите использовать:

.Replace("&amp;", "%26")