C# 什么';s不同的Microsoft.JScript.GlobalObject.escape和Uri.EscapeUriString

C# 什么';s不同的Microsoft.JScript.GlobalObject.escape和Uri.EscapeUriString,c#,C#,服务从Uri.EscapeUriString和Microsoft.JScript.GlobalObject.escape接收到的字符串是不同的,那么我使用Microsoft.JScript.GlobalObject.escape来处理url是否正确 c#中的Microsoft.JScript.GlobalObject.escape和Uri.EscapeUriString有什么不同?虽然可以在c#开箱即用中使用Uri.EscapeUriString,但它不能像JavaScript转义函数那样完全转

服务从Uri.EscapeUriString和Microsoft.JScript.GlobalObject.escape接收到的字符串是不同的,那么我使用Microsoft.JScript.GlobalObject.escape来处理url是否正确


c#中的Microsoft.JScript.GlobalObject.escape和Uri.EscapeUriString有什么不同?

虽然可以在c#开箱即用中使用
Uri.EscapeUriString
,但它不能像JavaScript转义函数那样完全转换所有字符

例如,假设原始字符串是:“somestring's/Hello”

Uri.EscapeUriString(“某些字符串的/Hello”)

输出: “某些%20字符串的%20/你好”

Microsoft.JScript.GlobalObject.escape(“某些字符串的/Hello”)

输出: “某些%20字符串%27s%20/您好”

请注意Uri.EscapeUriString如何没有转义

话虽如此,让我们看一个更极端的例子。假设我们有这个字符串“&/\\\,+()$~%..”:*?<>{}让我们看看用这两种方法进行转义会给我们带来什么

Microsoft.JScript.GlobalObject.escape("& / \\ # , + ( ) $ ~ % .. ' \" : * ? < > { }")
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
对所有字符进行了转义,除了
+
/
*
,甚至是在uri中有效的字符。例如,
&
即使在查询字符串中有效,也进行了转义


因此,这完全取决于您希望在何时何地转义您的URI,以及您正在创建/转义的URI类型。

您为什么会考虑使用?“不推荐使用…”。。。转义函数不应用于编码统一资源标识符(URI)。使用encodeURI和encodeURIComponent函数。”首先感谢您的回答。在我的情况下,我需要在后端生成Uri,因此我选择其中一个函数来转义Uri。但是其中一个函数的文档说明“不要使用此函数”“-那你为什么还在考虑使用这个函数呢?非常感谢,它非常清晰易懂。我确实在后端生成Uri,而且服务使用Js来取消转义Uri,所以当我使用Uri.EscapeUriString来转义Uri时,它不起作用。