C#与JavaScript的encodeURIComponent()有相同之处吗?
在JavaScript中:
encodeURIComponent("©√") == "%C2%A9%E2%88%9A"
是否有相当于C#应用程序? 为了转义HTML字符,我使用了:
txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]", m => @"&#" + ((int)m.Value[0]).ToString() + ";");
但我不知道如何将匹配转换为JS使用正确的hex格式。 例如这个代码:
txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]", m => @"%" + String.Format("{0:x}", ((int)m.Value[0])));
为"©√"
返回“ %a9%221a"
,而不是"%C2%A9%E2%88%9A"
。 它看起来像我需要将string拆分成字节或东西。
编辑:这是一个Windows应用程序, System.Web
中唯一可用的项目是: AspNetHostingPermission
, AspNetHostingPermissionAttribute
和AspNetHostingPermissionLevel
。
Uri.EscapeDataString
或HttpUtility.UrlEncode
是将string转义成URL的正确方法。
以string"Stack Overflow"
为例:
-
HttpUtility.UrlEncode("Stack Overflow")
– >"Stack+Overflow"
-
Uri.EscapeUriString("Stack Overflow")
– >"Stack%20Overflow"
-
Uri.EscapeDataString("Stack + Overflow")
– >Uri.EscapeDataString("Stack + Overflow")
编码"+" to "%2b"
—->Stack%20%2B%20%20Overflow
当用作URL的实际部分时,只有后者才是正确的(而不是其中一个查询string参数的值)
HttpUtility.HtmlEncode
/ Decode
HttpUtility.UrlEncode
/ Decode
如果在项目中不可用,则可以添加对System.Web
程序集的引用
我试图做完全兼容的模拟JavaScript的encodeURIComponent为C#和我的4小时的实验后,我发现这一点
c#代码:
string a = "!@#$%^&*()_+ some text here али мамедов баку"; a = System.Web.HttpUtility.UrlEncode(a); a = a.Replace("+", "%20");
其结果是: %40%23%24%25%5%26 *()_%2b%20some%20text%20 here%20%d0%b0%d0%bb%d0%b8%20%d0%bc% D0%B0%D0%BC%D0%B5%D0%B4%D0%是%D0%B2%20%D0%B1%D0%B0%D0%BA%D1%83
在用Javascript的decodeURLComponent()解码之后,
你会得到这个: !@#$%^&*()_ +一些文本在这里алимамедовбаку
感谢您的关注
尝试Server.UrlEncode()
或System.Web.HttpUtility.UrlEncode()
的实例时,您无权访问Server
对象。 您也可以使用System.Uri.EscapeUriString()
来避免添加对System.Web
程序集的引用。
System.Uri.EscapeUriString()似乎没有做任何事情,但System.Uri.Escape 数据string()为我工作。
您可以使用System.Web命名空间中的Server对象
Server.UrlEncode,Server.UrlDecode,Server.HtmlEncode和Server.HtmlDecode。
编辑:海报补充说,这是一个Windows应用程序,而不是一个人会相信的networking。 上面列出的项目可以从System.Web中的HttpUtility类中获得,必须将其添加为项目的引用。
对于Windowsapp store,您将不具有HttpUtility。 相反,你有:
对于一个URI,在'?'之前:
- 系统。 Uri.EscapeUriString (“example.com/Stack Overflow ++?”)
- – >“example.com/Stack%20Overflow++?”
对于URI查询名称或值,在'?'之后:
- 系统。 Uri.EscapeDataString (“Stack Overflow ++”)
- – >“Stack%20Overflow%2B%2B”
对于x-www-form-urlencoded查询名称或值,在POST内容中:
- System.Net。 WebUtility.UrlEncode (“Stack Overflow ++”)
- – >“堆栈+溢出%2B%2B”