Служба получила строку из Uri.EscapeUriString и Microsoft.JScript.GlobalObject.escape - разница, тогда я использую Microsoft.JScript.GlobalObject.escape для обработки URL-адреса в порядке.
Чем отличается Microsoft.JScript.GlobalObject.escape и Uri.EscapeUriString в С#?
Хотя 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 вы создаете/экранируете.
escape
? «Не рекомендуется ... Функция escape не должна использоваться для кодирования универсальных идентификаторов ресурсов (URI). Вместо этого используйте функции encodeURI и encodeURIComponent ».