Чем отличаются Microsoft.JScript.GlobalObject.escape и Uri.EscapeUriString

1

Служба получила строку из Uri.EscapeUriString и Microsoft.JScript.GlobalObject.escape - разница, тогда я использую Microsoft.JScript.GlobalObject.escape для обработки URL-адреса в порядке.

Чем отличается Microsoft.JScript.GlobalObject.escape и Uri.EscapeUriString в С#?

  • 0
    Почему вы когда-нибудь задумывались об использовании escape ? «Не рекомендуется ... Функция escape не должна использоваться для кодирования универсальных идентификаторов ресурсов (URI). Вместо этого используйте функции encodeURI и encodeURIComponent ».
  • 0
    спасибо вы ответите сначала. В моем случае мне нужно сгенерировать Uri в бэкэнде, поэтому я выбираю один из них, чтобы избежать Uri.
Показать ещё 1 комментарий
Теги:

1 ответ

1
Лучший ответ

Хотя Uri.EscapeUriString доступен для использования в С# из коробки, он не может преобразовать все символы точно так же, как это делает функция escape-кода JavaScript.

Например, предположим, что исходная строка: "Some String/Hello".

Uri.EscapeUriString("Some String/Hello")

output: "Some %20String's %20/Hello"

Microsoft.JScript.GlobalObject.escape("Some String/Hello")

output: "Some %20String% 27s %20/Hello"

Обратите внимание, как Uri.EscapeUriString не миновал '.

Это, как говорится, позволяет взглянуть на более экстремальный пример. Предположим, что у нас есть эта строка "&/\ #, +() $ ~%.. '": *? <> {} ". Посмотрим, как это ускользнет от обоих методов.

Microsoft.JScript.GlobalObject.escape("& / \\ # , + ( ) $ ~ % .. ' \" : * ? < > { }")

выход: "% 26 %20/ %20% 5C %20% 23 %20% 2C %20+ %20% 28 %20% 29 %20% 24 %20% 7E %20% 25 %20.. %20 % 27 %20% 22 %20% 3A %20 * %20% 3F %20% 3C %20% 3E %20% 7B %20% 7D"

Uri.EscapeUriString("&/\\ #, + ( ) $ ~ %.. ' \": *? < > { }")

выход: "& %20/ %20% 5C %20 # %20, %20+ %20 ( %20) %20% %20 %20% 25 %20.. %20 ' %20% 22 %20: %20% * 20 %20% 3C %20% 3E %20% 7B %20% 7D"

Обратите внимание, что Microsoft.JScript.GlobalObject.escape избежал всех символов, кроме +, /, * и . , даже те, которые действительны в ури. Например ? and & where escaped, даже если они действительны в строке запроса.

Таким образом, все зависит от того, где и когда вы хотите избежать своего URI и какого типа URI вы создаете/экранируете.

  • 0
    Очень ценю, это очень ясно и легко понять. Я генерирую Uri в бэк-энде, и сервис использует Js для выхода из Uri, поэтому он не работает, когда я использовал Uri.EscapeUriString для выхода из Uri.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню