Вопрос

В 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"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top