在JavaScript中:
encodeURIComponent("©?") == "%C2%A9%E2%88%9A"
是否有C#应用程序的等价物?对于我使用的转义HTML字符:
txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]", m => @"" + ((int)m.Value[0]).ToString() + ";");
但我不确定如何将匹配转换为JS使用的正确十六进制格式.例如这段代码:
txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]", m => @"%" + String.Format("{0:x}", ((int)m.Value[0])));
返回" %a9%221a"
for "©?"
而不是"%C2%A9%E2%88%9A"
.看起来我需要将字符串拆分为字节或其他东西.
编辑:这是一个Windows应用程序中,唯一可用的项目System.Web
有:AspNetHostingPermission
,AspNetHostingPermissionAttribute
,和AspNetHostingPermissionLevel
.
Uri.EscapeDataString
或者HttpUtility.UrlEncode
是转义符合URL一部分的字符串的正确方法.
以字符串为例"Stack Overflow"
:
HttpUtility.UrlEncode("Stack Overflow")
- > "Stack+Overflow"
Uri.EscapeUriString("Stack Overflow")
- > "Stack%20Overflow"
Uri.EscapeDataString("Stack + Overflow")
- >还编码"+" to "%2b"
---->Stack%20%2B%20%20Overflow
当用作URL的实际部分时,只有最后一个是正确的(而不是查询字符串参数之一的值)
HttpUtility.HtmlEncode
/解码
HttpUtility.UrlEncode
/解码
System.Web
如果在项目中不可用,则可以添加对程序集的引用
我尝试为c#做javascript的encodeURIComponent的完全兼容模拟,经过我4小时的实验,我发现了这个
c#代码:
string a = "!@#$%^&*()_+ some text here ??? ??????? ????"; a = System.Web.HttpUtility.UrlEncode(a); a = a.Replace("+", "%20");
结果是: !%40%23%24%25%5e%26*()_%2b%20some%20text%20here%20%d0%b0%d0%bb%d0%b8%20%d0%bc% D0%B0%D0%BC%D0%B5%D0%B4%D0%是%D0%B2%20%D0%B1%D0%B0%D0%BA%D1%83
用Javascript的decodeURLComponent()解码它之后;
你会得到这个: !@#$%^&*()_ +这里的一些文字алимамедовбаку
感谢您的关注
System.Uri.EscapeUriString()似乎没有做任何事情,但System.Uri.Escape Data String()对我有用.
尝试Server.UrlEncode()
,或者System.Web.HttpUtility.UrlEncode()
在您无法访问该Server
对象的情况下.您还可以使用System.Uri.EscapeUriString()
以避免添加对System.Web
程序集的引用.
对于Windows应用商店应用,您将没有HttpUtility.相反,你有:
对于URI,在'?'之前:
系统.Uri.EscapeUriString("example.com/Stack Overflow ++?")
- >"example.com/Stack%20Overflow++?"
对于URI查询名称或值,在'?'之后:
系统.Uri.EscapeDataString("Stack Overflow ++")
- >"Stack%20Overflow%2B%2B"
对于x-www-form-urlencoded查询名称或值,在POST内容中:
System.Net.WebUtility.UrlEncode("Stack Overflow ++")
- >"Stack + Overflow%2B%2B"
您可以在System.Web命名空间中使用Server对象
Server.UrlEncode,Server.UrlDecode,Server.HtmlEncode和Server.HtmlDecode.
编辑:海报补充说,这是一个Windows应用程序而不是人们会相信的网络应用程序.上面列出的项目可以从System.Web中的HttpUtility类获得,该类必须作为项目的引用添加.