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

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

Does C# have an equivalent to JavaScript's encodeURIComponent()?

在JavaScript中:

1
encodeURIComponent("?√") =="%C2%A9%E2%88%9A"

C#应用程序是否等效?为了转义HTML字符,我使用了:

1
2
txtOut.Text = Regex.Replace(txtIn.Text, @"[\\u0080-\\uFFFF]",
    m => @"&#" + ((int)m.Value[0]).ToString() +";");

但是我不确定如何将匹配项转换为JS使用的正确十六进制格式。例如此代码:

1
2
txtOut.Text = Regex.Replace(txtIn.Text, @"[\\u0080-\\uFFFF]",
    m => @"%" + String.Format("{0:x}", ((int)m.Value[0])));

"?√"而不是"%C2%A9%E2%88%9A"返回" %a9%221a"。看来我需要将字符串分成字节或其他内容。

编辑:这是针对Windows应用程序,System.Web中唯一可用的项目是:AspNetHostingPermissionAspNetHostingPermissionAttributeAspNetHostingPermissionLevel


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的实际部分时,最后一个是正确的(与查询字符串参数之一的值相对)


HttpUtility.HtmlEncode /解码
HttpUtility.UrlEncode /解码

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


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

c#代码:

1
2
3
string a ="!@#$%^&*()_+ some text here али мамедов баку";
a = System.Web.HttpUtility.UrlEncode(a);
a = a.Replace("+","%20");

结果是:
!@#$%^&*()_ +此处输入一些文字алимамедовбаку

使用Javascript的encodeURLComponent()对其进行解码后;

您将获得以下信息:
!@#$%^


System.Uri.EscapeUriString()似乎什么也没做,但是System.Uri.EscapeDataString()对我有用。


尝试Server.UrlEncode()System.Web.HttpUtility.UrlEncode()(对于无法访问Server对象的实例)。您还可以使用System.Uri.EscapeUriString()避免添加对System.Web程序集的引用。


n


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

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

编辑:发帖人补充说,这是Windows应用程序,而不是人们认为的Web应用程序。上面列出的项目可以从System.Web内部的HttpUtility类中获得,必须将其添加为对项目的引用。


推荐阅读