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

在 JavaScript 中:

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

对于 C # 应用程序来说,有没有一种等效的方法:

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

128125 次浏览

HttpUtility.HtmlEncode/Decode
HttpUtility.UrlEncode/Decode

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

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

Server.UrlEncode、 Server.UrlDecode、 Server.htmlEncode 和 Server.htmlDecode。

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

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

System.Uri. EscapeUriString ()似乎没有做任何事情,但 System.Uri. Escape百科String ()为我工作。

Uri.EscapeDataStringHttpUtility.UrlEncode是转义应该作为 URL 一部分的字符串的正确方法。

以字符串 "Stack Overflow"为例:

  • HttpUtility.UrlEncode("Stack Overflow")-> "Stack+Overflow"

  • Uri.EscapeUriString("Stack Overflow")-> "Stack%20Overflow"

  • 也编码 "+" to "%2b"—— > Stack%20%2B%20%20Overflow

当作为 URL 的实际部分使用时(与查询字符串参数之一的值相反) ,只有最后一个才是正确的

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

密码:

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

结果是: !% 40% 23% 24% 25% 5e% 26 * () _% 2b% 20some% 20text% 20 here% 20% d0% b0% d0% bb% d0% b8% 20% d0% bc% d0% bc% d0% b0% d0% b5% d0% b4% d0% be% d0% b2% 20% d0% b1% b0% d0% ba% d1% 83

在使用 Javascript 的 decdeURLComponent ()对其进行解码之后;

你会得到这个: @ # $% ^ & * () _ + 一些文本在这里

谢谢你的关注

对于 Windows 商店应用程序,你不需要 HttpUtility. 相反,你需要:

对于 URI,在“ ?”之前:

  • 系统 Uri EscapeUriString(「 example.com/stack 溢出 + + ? 」)
    • - > “ example.com/stack%20overflow++ ?”

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

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

对于在 POST 内容中的 X-www-form-urlencode查询名称或值:

  • System.Net.WebUtility.UrlEncode(“堆栈溢出 + +”)
    • - > 「堆叠 + 溢出% 2B% 2B 」