用HttpUtility.UrlEncode替换HttpUtility.UrlEncodeUnicode是否安全?

时间:2019-09-26 05:35:47

标签: c# urlencode

在构建一些旧代码时我得到了警告:

  

'System.Web.HttpUtility.UrlEncodeUnicode(string)'已过时:'“ This   该方法产生不符合标准的输出并具有   互操作性问题。首选的替代方法是   UrlEncode(String)。“'

HttpUtility.UrlEncodeUnicode(string)替换为HttpUtility.UrlEncode(string)是否安全?两种方法都能为任何字符串产生相同结果吗?

如果没有,首选的替代方法是什么?

2 个答案:

答案 0 :(得分:1)

  

两种方法对任何字符串都产生相同的结果吗?

否,例如:

HttpUtility.UrlEncodeUnicode("☺"); // %u263a
HttpUtility.UrlEncode("☺") // %e2%98%ba
  

用HttpUtility.UrlEncode(string)替换HttpUtility.UrlEncodeUnicode(string)是否安全?

几乎是安全的,它取决于解码器,大多数解码器可以处理UrlEncode的结果,因为它是标准的,如果您的项目使用非标准的,则不安全。 (顺便说一句,HttpUtility.UrlDecode可以处理两个结果。)

答案 1 :(得分:0)

基于Microsoft Reference Source(具有.NET引用的源代码)。 HttpUtility.UrlEncode(string)HttpUtility.UrlEncodeUnicode(string)的替代方法,如下所示:

[Obsolete("This method produces non-standards-compliant output and has interoperability issues. The preferred alternative is UrlEncode(String).")]
public static string UrlEncodeUnicode(string str) {..} // just removed the code in case of copy-rights. 

因此,与UrlEncode(*)相比,最好使用UrlEncodeUnicode(*),您可以从here检查参考源