什么是不同的Microsoft.JScript.GlobalObject.escape和Uri.EscapeUriString

时间:2015-01-20 06:02:55

标签: c#

服务收到来自Uri.EscapeUriString的字符串和Microsoft.JScript.GlobalObject.escape不同,然后我使用Microsoft.JScript.GlobalObject.escape来处理url是好的。

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

1 个答案:

答案 0 :(得分:1)

尽管可以在C#中使用Uri.EscapeUriString开箱即用,但它无法完全转换所有字符,就像JavaScript转义函数一样。

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

Uri.EscapeUriString("Some String's /Hello")

<强>输出: “一些%20String的%20 /你好”

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

<强>输出: “一些%20String%-27%20 /你好”

注意Uri.EscapeUriString没有逃脱'

话虽如此,让我们看一个更极端的例子。假设我们有这个字符串“&amp; / \#,+()$〜%..'”:*? &LT; &GT; {}“。让我们看看用这两种方法逃避的事情给我们带来了什么。

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("& / \\ # , + ( ) $ ~ % .. ' \" : * ? < > { }")

输出:“&amp;%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类型。