it-swarm.cn

C#是否与JavaScript的encodeURIComponent()等效?

在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中唯一可用的项目是:AspNetHostingPermissionAspNetHostingPermissionAttributeAspNetHostingPermissionLevel

116
travis

Uri.EscapeDataStringHttpUtility.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的实际部分时,只有最后一个是正确的(而不是查询字符串参数之一的值)

187
Steve

HttpUtility.HtmlEncode /解码
HttpUtility.UrlEncode/Decode

如果项目中没有System.Web程序集,则可以添加对该程序集的引用

18
David Thibault

我尝试为c#做javascript的encodeURIComponent的完全兼容模拟,经过我4小时的实验,我发现了这个

c#代码:

string a = "[email protected]#$%^&*()_+ 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()解码它之后;

你会得到这个: !@#$%^&*()_ +这里的一些文字алимамедовбаку

感谢您的关注

16
Ali Mamedov

System.Uri.EscapeUriString()似乎没有做任何事情,但System.Uri.Escape Data String()对我有用。

11
Echilon

当您无权访问Server对象时,请尝试使用Server.UrlEncode()System.Web.HttpUtility.UrlEncode()。您也可以使用System.Uri.EscapeUriString()来避免添加对System.Web程序集的引用。

9
Billy Jo

对于Windows应用商店应用,您将没有HttpUtility。相反,你有:

对于URI,在'?'之前:

  • System. Uri.EscapeUriString (“example.com/Stack溢出++?”)[。_____。]
    • - >“example.com/Stack%20Overflow++?”

对于URI查询名称或值,在'?'之后:

  • System. Uri.EscapeDataString (“Stack Overflow ++”)[。_____。]
    • - >“Stack%20Overflow%2B%2B”

对于 x-www-form-urlencoded 查询名称或值,在POST内容中:

  • System.Net. WebUtility.UrlEncode (“Stack Overflow ++”)[。_____。]
    • - >“Stack + Overflow%2B%2B”
6
Cœur

您可以在System.Web命名空间中使用Server对象

Server.UrlEncode,Server.UrlDecode,Server.HtmlEncode和Server.HtmlDecode。

编辑:海报补充说,这是一个Windows应用程序而不是人们会相信的网络应用程序。上面列出的项目可以从System.Web中的HttpUtility类获得,该类必须作为项目的引用添加。

6
Mitchel Sellers