Есть ли в C # эквивалент encodeURIComponent() в JavaScript?
-
01-07-2019 - |
Вопрос
В JavaScript:
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"
.Похоже, мне нужно разбить строку на байты или что-то в этом роде.
Редактировать:Это для приложения Windows, единственные элементы, доступные в System.Web
являются: AspNetHostingPermission
, AspNetHostingPermissionAttribute
, и AspNetHostingPermissionLevel
.
Решение
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-адреса (в отличие от значения одного из параметров строки запроса).
Другие советы
HttpUtility.HtmlEncode
/ Расшифровать
HttpUtility.UrlEncode
/ Расшифровать
Вы можете добавить ссылку на System.Web
сборка, если она недоступна в вашем проекте
Я попытался создать полностью совместимый аналог javascript encodeURIComponent для c #, и после моих 4-часовых экспериментов я нашел это
КОД на c #:
string a = "!@#$%^&*()_+ 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%bb%d0%b8%20%d0%bc%d0%b0%d0%bc%d0%b5%d0%b4%d0%be%d0%b2%20%d0%b1%d0%b0%d0%ba%d1%83
После того, как вы декодируете Его с помощью Javascript decodeURLComponent();
вы получите это:!@#$%^&*()_+ some text here али мамедов баку
Спасибо Вам за внимание
System.Uri.EscapeUriString(), похоже, ничего не делала, но System.Uri.EscapeДанныеString() сработал у меня.
Попробуй Server.UrlEncode()
, или System.Web.HttpUtility.UrlEncode()
для случаев, когда у вас нет доступа к Server
объект.Вы также можете использовать System.Uri.EscapeUriString()
чтобы избежать добавления ссылки на System.Web
сборка.
Вы можете использовать объект Server в системе.Пространство имен Web
Сервер.UrlEncode, Сервер.UrlDecode, Сервер.HtmlEncode и Server.HtmlDecode.
Редактировать:плакат добавил, что это приложение для Windows, а не веб-приложение, как можно было бы подумать.Перечисленные выше элементы будут доступны из класса HttpUtility внутри System.Web, который необходимо добавить в качестве ссылки на проект.
Для приложения Windows Store у вас не будет HttpUtility.Вместо этого у вас есть:
Для URI, перед '?':
- Система.Uri.Управление побегом("example.com/Stack Переполнение++?")
- -> "example.com/Stack%20Overflow++?"
Для имени или значения запроса URI после '?':
- Система.Uri.EscapeDataString (Экранированный запрос)("Переполнение стека++")
- -> "Stack%20Overflow%2B%2B"
Для x-www-форма-urlencoded запрашивайте имя или значение в содержимом ПУБЛИКАЦИИ:
- System.Net .Веб-использование.UrlEncode("Переполнение стека++")
- -> "Стек+ переполнение%2B%2B"