服务收到来自Uri.EscapeUriString的字符串和Microsoft.JScript.GlobalObject.escape不同,然后我使用Microsoft.JScript.GlobalObject.escape来处理url是好的。
c#中的Microsoft.JScript.GlobalObject.escape和Uri.EscapeUriString之间有什么不同?
答案 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类型。