一尘不染

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

javascript

在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有:AspNetHostingPermissionAspNetHostingPermissionAttribute,和AspNetHostingPermissionLevel


阅读 495

收藏
2020-05-01

共1个答案

一尘不染

Uri.EscapeDataString或者HttpUtility.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的实际部分时,只有最后一个是正确的(与查询字符串参数之一的值相反)

2020-05-01