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

2022-08-30 02:39:37

在 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])));

返回 “ for 而不是 。看起来我需要将字符串拆分为字节或其他东西。%a9%221a""©√""%C2%A9%E2%88%9A"

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


答案 1

Uri.EscapeDataString或者是转义要成为URL一部分的字符串的正确方法。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

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


答案 2

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

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