不C#有一个相当于JavaScript的encodeURIComponent()?
-
01-07-2019 - |
题
在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"
对于 "©√"
而不是的 "%C2%A9%E2%88%9A"
.它看起来像我需要分割的串入字节或者东西。
编辑:这是一windows的应用程序,只有项目提供 System.Web
有: AspNetHostingPermission
, AspNetHostingPermissionAttribute
, , AspNetHostingPermissionLevel
.
解决方案
Uri.EscapeDataString
或 HttpUtility.UrlEncode
是正确的方法来逃脱一串是一部分的一个网址。
举个例子串 "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
只有最后一个是正确的,当被用作一个实际部分的网址(相对于价值之一的查询串的参数)
其他提示
HttpUtility.HtmlEncode
/解码
HttpUtility.UrlEncode
/解码
你可以添加一个参考 System.Web
大会,如果它不在你的项目
我试图做到全面兼容的模拟javascript的encodeURIComponent c#后我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%be%d0%b2%20%d0%b1%d0%b0%d0%ba%d1%83
之后你解码这Javascript的decodeURLComponent();
你会得到这个:!@#$%^&*()_+ 一些文字在这里али мамедов баку
谢谢你的关注
系统。Uri。EscapeUriString()似乎没有做任何事,但系统。Uri。逃脱数据String()为我工作。
尝试 Server.UrlEncode()
, 或 System.Web.HttpUtility.UrlEncode()
为实例,当你没有访问 Server
对象。你也可以使用 System.Uri.EscapeUriString()
为了避免增加一个参考 System.Web
大会。
你可以使用的服务对象在该系统。Web namespace
服务器。UrlEncode、服务器。UrlDecode、服务器。HtmlEncode和服务器。HtmlDecode.
编辑:海报加,这是一个windows的应用并不一网络作为一个人会相信。上面列出的项目将可从HttpUtility类内部系统。网络必须加入作为参考的项目。
Windows存储程序,你不会有HttpUtility.相反,你有:
对于一个URI之前,'?':
- 系统。Uri。EscapeUriString("example.com/Stack 溢出++?")
- ->"example.com/Stack%20Overflow++?"
对于一个URI查询名或价值,后经'?':
- 系统。Uri。EscapeDataString("堆溢出++")
- ->"堆%20Overflow%2B%2B"
对于一个 x-www-form-urlencoded 查询名或价值,在一章内容:
- System.Net.WebUtility.UrlEncode("堆溢出++")
- ->"堆+溢出%2B%2B"