Имеет ли С# эквивалент JavaScript encodeURIComponent()?
В JavaScript:
encodeURIComponent("©√") == "%C2%A9%E2%88%9A"
Есть ли эквивалент для приложений С#? Для экранирования символов 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"
. Похоже, мне нужно разбить строку на байты или что-то в этом роде.
Изменить: это приложение для Windows, единственными элементами, доступными в System.Web
, являются: AspNetHostingPermission
, AspNetHostingPermissionAttribute
и AspNetHostingPermissionLevel
.
Ответы
Ответ 1
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-адреса (в отличие от значения одного из параметров строки запроса)
Ответ 2
HttpUtility.HtmlEncode
/Декодирование
HttpUtility.UrlEncode
/Декодирование
Вы можете добавить ссылку на сборку System.Web
, если она недоступна в вашем проекте
Ответ 3
Я попытался выполнить полный совместимый аналог javascript encodeURIComponent для С#, и после моих 4-часовых экспериментов я нашел это
С# CODE:
string a = "[email protected]#$%^&*()_+ some text here али мамедов баку";
a = System.Web.HttpUtility.UrlEncode(a);
a = a.Replace("+", "%20");
результат:
!% 40% 23% 24% 25% 5e% 26 *() _% 2b %20some %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
После декодирования с помощью Javascript decodeURLComponent();
вы получите следующее:
! @# $% ^ & *() _ + текст здесь али мамедов баку
Спасибо за внимание
Ответ 4
Попробуйте Server.UrlEncode()
или System.Web.HttpUtility.UrlEncode()
для экземпляров, если у вас нет доступа к объекту Server
. Вы также можете использовать System.Uri.EscapeUriString()
, чтобы не добавлять ссылку на сборку System.Web
.
Ответ 5
System.Uri.EscapeUriString(), похоже, ничего не сделал, но System.Uri.Escape Datastrong > String() работал у меня.
Ответ 6
Вы можете использовать объект Server в пространстве имен System.Web
Server.UrlEncode, Server.UrlDecode, Server.HtmlEncode и Server.HtmlDecode.
Изменить: постер добавил, что это приложение для Windows, а не веб-приложение, как можно было бы верить. Элементы, перечисленные выше, будут доступны из класса HttpUtility внутри System.Web, который должен быть добавлен в качестве ссылки на проект.
Ответ 7
Для приложения Windows Store у вас не будет HttpUtility. Вместо этого у вас есть:
Для URI перед символом '?':
- Система. Uri.EscapeUriString ( "example.com/Qaru ++?" )
- → "example.com/Stack%20Overflow ++?"
Для имени или значения запроса URI после '?':
- Система. Uri.EscapeDataString ( "Qaru ++" )
- → "Stack %20Overflow% 2B% 2B"
Для x-www-form-urlencoded имя или значение запроса в содержимом POST:
- System.Net. WebUtility.UrlEncode ( "Qaru ++" )
- → "Stack + Overflow% 2B% 2B"