【发布时间】:2016-09-09 12:22:16
【问题描述】:
我有一个加密的字符串,看起来像这样
Pfx32q+xLq4R+VocXy4IC8aQNdmFqdA284THap54Bl4=
在加密这个字符串时,我们调用HttpUtility.UrlEncode("Pfx32q+xLq4R+VocXy4IC8aQNdmFqdA284THap54Bl4="),将加密的字符串作为参数传递,这会返回一个值
Pfx32q%2BxLq4R%2BVocXy4IC8aQNdmFqdA284THap54Bl4%3D
+ 中的位置在我的开发系统上被替换为 %2 等等,但是当在生产服务器上运行相同的代码时,加号不会被编码,而是保持为 + 。
我们无法指出真正造成这种情况的原因。是否存在在调用 HttpUtility.UrlEncode 方法时不会对 + 等字符进行编码的情况或情况?
【问题讨论】:
-
+也是 url 的有效字符,这就是它未在此处编码的原因是 base URI 定义 -
您是否在开发盒和服务器上运行相同的 .NET 版本?服务器是否可能运行 Mono? .NET 4.0 及更高版本的 Microsoft 源代码肯定会转义
+字符。请参阅IsUrlSafeChar此处referencesource.microsoft.com/#System/net/System/Net/…+在注释中明确提及,尽管有 RFC 规则,但仍被转义。 -
URI paths 和 data 以不同的方式编码。您应该将 EscapeDataString 用于数据。您还应该确保在服务器和机器上使用相同的 .NET 版本,升级落后者。
标签: c# asp.net httprequest urlencode url-encoding