在JavaScript中:
1
| encodeURIComponent("?√") =="%C2%A9%E2%88%9A" |
C#应用程序是否等效?为了转义HTML字符,我使用了:
1 2
| txtOut.Text = Regex.Replace(txtIn.Text, @"[\\u0080-\\uFFFF]",
m => @"&#" + ((int)m.Value[0]).ToString() +";"); |
但是我不确定如何将匹配项转换为JS使用的正确十六进制格式。例如此代码:
1 2
| txtOut.Text = Regex.Replace(txtIn.Text, @"[\\u0080-\\uFFFF]",
m => @"%" + String.Format("{0:x}", ((int)m.Value[0]))); |
为"?√"而不是"%C2%A9%E2%88%9A"返回" %a9%221a"。看来我需要将字符串分成字节或其他内容。
编辑:这是针对Windows应用程序,System.Web中唯一可用的项目是:AspNetHostingPermission,AspNetHostingPermissionAttribute和AspNetHostingPermissionLevel。
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的实际部分时,最后一个是正确的(与查询字符串参数之一的值相对)
HttpUtility.HtmlEncode /解码
HttpUtility.UrlEncode /解码
如果项目中不存在对System.Web程序集的引用,则可以添加对该引用的引用
我试图为c#做完全兼容的javascript \\'s encodeURIComponent的模拟,经过4个小时的实验,我发现了这个
c#代码:
1 2 3
| string a ="!@#$%^&*()_+ some text here али мамедов баку";
a = System.Web.HttpUtility.UrlEncode(a);
a = a.Replace("+","%20"); |
结果是:
!@#$%^&*()_ +此处输入一些文字алимамедовбаку
使用Javascript的encodeURLComponent()对其进行解码后;
您将获得以下信息:
!@#$%^
System.Uri.EscapeUriString()似乎什么也没做,但是System.Uri.EscapeDataString()对我有用。
尝试Server.UrlEncode()或System.Web.HttpUtility.UrlEncode()(对于无法访问Server对象的实例)。您还可以使用System.Uri.EscapeUriString()避免添加对System.Web程序集的引用。
n
您可以在System.Web名称空间中使用Server对象。
Server.UrlEncode,Server.UrlDecode,Server.HtmlEncode和Server.HtmlDecode。
编辑:发帖人补充说,这是Windows应用程序,而不是人们认为的Web应用程序。上面列出的项目可以从System.Web内部的HttpUtility类中获得,必须将其添加为对项目的引用。