2008-09-17 4 views
87

В JavaScript:Имеет ли C# эквивалент JavaScript encodeURIComponent()?

encodeURIComponent("©√") == "%C2%A9%E2%88%9A" 

Есть ли эквивалент для приложений C#? Для побега HTML символов я использовал:

txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]", 
    m => @"&#" + ((int)m.Value[0]).ToString() + ";"); 

Но я не знаю, как перевести матч в правильном шестнадцатеричном формате, который использует JS. Например, этот код:..

txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]", 
    m => @"%" + String.Format("{0:x}", ((int)m.Value[0]))); 

Возвращает "%a9%221a" для "©√" вместо "%C2%A9%E2%88%9A" Похоже, мне нужно разбить строку вверх в байтах или что-то

Edit: Это для окна приложения, то только элементы, доступные в System.Web являются:. AspNetHostingPermission, AspNetHostingPermissionAttribute и AspNetHostingPermissionLevel

ответ

144

Uri.EscapeDataString или HttpUtility.UrlEncode - это правильный способ избежать строки, предназначенной для части URL.

Возьмем, например, строка "Stack Overflow":

  • HttpUtility.UrlEncode("Stack Overflow") ->"Stack+Overflow"

  • Uri.EscapeUriString("Stack Overflow") ->"Stack%20Overflow"

  • Uri.EscapeDataString("Stack + Overflow") -> Также кодирует "+" to "%2b" ---->Stack%20%2B%20%20Overflow

Только последний последний является правильным при использовании в качестве фактической части URL (в отличие от значения одного из параметров строки запроса)

16

HttpUtility.HtmlEncode/Decode
HttpUtility.UrlEncode/Decode

Вы можете добавить ссылку на System.Web сборки, если он не доступен в вашем проекте

+0

Я должен был более конкретен: Это для окна приложения, только элементы доступны в System.Web: AspNetHostingPermission, AspNetHostingPermissionAttribute и AspNetHostingPermissionLevel. – travis 2008-09-17 19:15:16

+4

Вы можете добавить ссылку на сборку System.Web – 2008-09-17 19:18:18

+0

Я просто понял, что, спасибо! – travis 2008-09-17 19:20:22

5

Вы можете использовать объект сервера в System.Web имен

Server.UrlEncode, Server.UrlDecode, Server. HtmlEncode и Server.HtmlDecode.

Редактировать: плакат добавил, что это приложение для Windows, а не веб-приложение, как можно было бы верить. Элементы, перечисленные выше, будут доступны из класса HttpUtility внутри System.Web, который должен быть добавлен в качестве ссылки на проект.

+0

Объект Server недоступен из приложения Windows – travis 2008-09-17 19:21:39

9

Попробуйте Server.UrlEncode() или System.Web.HttpUtility.UrlEncode() для тех случаев, когда у вас нет доступа к объекту Server. Вы также можете использовать System.Uri.EscapeUriString(), чтобы избежать добавления ссылки на сборку System.Web.

9

System.Uri.EscapeUriString(), казалось, ничего не сделал, но System.Uri.Escape Данные String() работал для меня.

13

Я попытался сделать полный совместимый аналог encodeURIComponent JavaScript для C# и после моих часовых экспериментов 4 я нашел это

C# Код:

string a = "[email protected]#$%^&*()_+ some text here али мамедов баку"; 
a = System.Web.HttpUtility.UrlEncode(a); 
a = a.Replace("+", "%20"); 

результат является: % 40% 23% 24% 25% 5e% 26 *() _% 2b% 20so меня% 20text% 20here% 20% d0% b0% d0% бб% d0% b8% 20% d0% Ьс% d0% b0% d0% Ьс% d0% b5% d0% b4% d0% быть% d0% b2% 20% d0% b1% d0% b0% d0% ba% d1% 83

После того, как вы декодируете его с помощью JQuery decodeURLComponent();

вы получите это: @ # $%^& *() _ + некоторый текст здесь али мамедов баку

Спасибо за внимание

4

Для Windows Store App, вы выиграли У меня есть HttpUtility. Вместо этого, у вас есть:

Для URI, прежде чем '?':

  • системы. Uri.EscapeUriString ("example.com/Stack Overflow ++?")
    • -> "example.com/Stack%20Overflow++?"

Для имени запроса URI или значение, после того, как '?':

  • системы. Uri.EscapeDataString ("переполнение стека ++")
    • -> "Стек% 20Overflow% 2B% 2B"

Для имени в x-www-form-urlencoded запроса или значение, в содержании POST:

  • System.Net. WebUtility.UrlEncode ("Stack Overflow ++")
    • -> "Стек + Переполнение% 2B% 2B"

 Смежные вопросы

  • Нет связанных вопросов^_^