Server.UrlEncode和HttpUtility.UrlEncode之间有区别吗?
在JavaScript中:
encodeURIComponent("©?") == "%C2%A9%E2%88%9A"
Run Code Online (Sandbox Code Playgroud)
是否有C#应用程序的等价物?对于我使用的转义HTML字符:
txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
m => @"&#" + ((int)m.Value[0]).ToString() + ";");
Run Code Online (Sandbox Code Playgroud)
但我不确定如何将匹配转换为JS使用的正确十六进制格式.例如这段代码:
txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
m => @"%" + String.Format("{0:x}", ((int)m.Value[0])));
Run Code Online (Sandbox Code Playgroud)
返回" %a9%221a"for "©?"而不是"%C2%A9%E2%88%9A".看起来我需要将字符串拆分为字节或其他东西.
编辑:这是一个Windows应用程序中,唯一可用的项目System.Web有:AspNetHostingPermission,AspNetHostingPermissionAttribute,和AspNetHostingPermissionLevel.
在最近的一个项目中,我有幸排除了一个错误,该错误涉及当文件名中有空格时图片无法加载.我想"这是一个简单的问题,我会的UrlEncode()!" 但是,NAY!简单地使用UrlEncode()没有解决问题.
新的问题是HttpUtilities.UrlEncode()方法交换空间() to plusses (+)代替的%20,如浏览器通缉.因此,file+image+name.jpg如果file%20image%20name.jpg发现正确,将返回not-found .
值得庆幸的是,一位同事HttpUtilities.UrlPathEncode()向我指出哪种用途%20代替空间+.
为什么有两种处理Url编码的方法?为什么有两个命令行为如此不同?
之间有什么区别
HttpUtility.UrlPathEncode(params);
Run Code Online (Sandbox Code Playgroud)
和
HttpUtility.UrlEncode(params);
Run Code Online (Sandbox Code Playgroud)
我查看了 MSDN 页面
https://msdn.microsoft.com/en-us/library/system.web.httputility.urlpathencode(v=vs.110).aspx
https://msdn.microsoft.com/en- us/library/system.web.httputility.urlencode(v=vs.110).aspx
但它只告诉你不要使用 UrlPathEncode,它没有说明有什么区别。
Server.UrlEncode("My File.doc")返回"My + File.doc",而javascript escape("My File.doc")返回"My%20File.doc".据我所知,javascript是corectly URL编码字符串而.net方法不是.它实际上似乎在实践中使用http://somesite/My+File.doc无法获取"My File.doc",无论如何我可以使用firefox/ie和IIS进行测试,而http:// somesite /我的%20File.doc工作正常.我错过了什么或Server.UrlEncode根本无法正常工作?
.net ×4
c# ×3
urlencode ×3
asp.net ×2
javascript ×2
encoding ×1
url ×1
url-encoding ×1
windows ×1