152

在 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是:AspNetHostingPermission、、AspNetHostingPermissionAttributeAspNetHostingPermissionLevel

4

7 回答 7

248

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

于 2010-12-29T00:21:40.270 回答
20

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

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

于 2008-09-17T19:06:21.647 回答
19

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

c#代码:

string a = "!@#$%^&*()_+ 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%be%d0%b2%20%d0%b1%d0%b0%d0%ba%d1%83

使用 Javascript 的 decodeURLComponent() 解码后;

你会得到这个: !@#$%^&*()_+ some text here али мамедов баку

感谢您的关注

于 2011-02-04T20:39:24.290 回答
13

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

于 2009-03-06T18:46:22.697 回答
10

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

于 2008-09-17T19:07:08.040 回答
10

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

对于 URI,在“?”之前:

  • 系统。Uri.EscapeUriString ("example.com/Stack Overflow++?")
    • ->“example.com/Stack%20Overflow++?”

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

  • 系统。Uri.EscapeDataString(“堆栈溢出++”)
    • ->“堆栈%20溢出%2B%2B”

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

  • 系统网。WebUtility.UrlEncode(“堆栈溢出++”)
    • ->“堆栈+溢出%2B%2B”
于 2013-06-10T08:51:35.723 回答
6

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

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

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

于 2008-09-17T19:06:40.520 回答