chatgpt网站,正规的网店平台有哪些,重庆有什么好玩的,做英文小说网站混乱的URI编码 JavaScript中编码有三种方法:escape、encodeURI、encodeURIComponent C#中编码主要方法#xff1a;HttpUtility.UrlEncode、Server.UrlEncode、Uri.EscapeUriString、Uri.EscapeDataString JavaScript中的还好#xff0c;只提供了三个#xff0c;C#中主要用的…混乱的URI编码 JavaScript中编码有三种方法:escape、encodeURI、encodeURIComponent C#中编码主要方法HttpUtility.UrlEncode、Server.UrlEncode、Uri.EscapeUriString、Uri.EscapeDataString JavaScript中的还好只提供了三个C#中主要用的就有这么多还没有列出其他编码(HTML)一多就弄不明白弄不明白就心生恐惧心生恐惧就变得苦逼本文就向大家详细解释在JavaScript及C#中如何对URI进行编码的方法(注本文不涉及到其他编码)。 escape不推荐使用 原因eacape是BOM中的方法只能对ASCII符号正确编码而encodeURI、encodeURIComponent可以对所有的Unicode符号编码。ECMAScript v3 反对使用该方法应用使用 decodeURI() 和 decodeURIComponent() 替代它。 escape不编码字符有69个*-./_0-9a-zA-Z encodeURI用于对网址编码(不包含参数) encodeURI不编码字符有82个!#$()*,-./:;?_~0-9a-zA-Z encodeURI就是为这个而设计的。encodeURI不对URI中的特殊字符进行编码如冒号(:)、斜杠(/)。下面看个示例 encodeURI(http://www.cnblogs.com/a file with spaces.html)// outputs http://www.cnblogs.com/a%20file%20with%20spaces.html 可以看到仅仅把空格替换成了20%所以此方法可用于对网址进行编码。 由于encodeURI不对冒号(:)、斜杠(/)进行编码所以如果参数(如把网址作为参数)中包含冒号(:)、斜杠(/)就会解析出错所以此方法不能对参数进行编码。 encodeURIComponent:用于对网址参数进行编码 encodeURIComponent不编码字符有71个! ()*-._~0-9a-zA-Z 可以看到此方法对:/都进行了编码所以不能用它来对网址进行编码。由于此方法对中文空格井号(#)斜线(/)冒号(:)都进行了编码所以适合对URI中的参数进行编码。看下面的示例 var param博客园;var urlhttp://www.cnblogs.com/?keyencodeURIComponent(param)page1;console.log(url);//outputs http://www.cnblogs.com/?key%E5%8D%9A%E5%AE%A2%E5%9B%ADpage1 可以看到这正是我们想要的结果(这里只对需要编码的参数(page1不需要编码)进行了编码)。 Server.UrlEncode HttpUtility.UrlEncode:不推荐 把这两个放到一起说是因为这两个方法在绝大多数情况下是一样的。它们的区别是HttpUtility.UrlEncode默认使用UTF8格式编码而Server.UrlEncode是使用系统预设格式编码Server.UrlEncode使用系統预设编码做为参数调用HttpUtility.UrlEncode编码所以如果系统全局都用UTF8格式编码这两个方法就是一样的。 这两个方法是怎么编码的呢我们来看个示例 string url1 http://www.cnblogs.com/a file with spaces.html?a1b博客园#abc;Response.Write(HttpUtility.UrlEncode(url1) );//outputhttp%3a%2f%2fwww.cnblogs.com%2fafilewithspaces.html%3fa%3d1%26b%3d%e5%8d%9a%e5%ae%a2%e5%9b%ad%23abc 由上面的例子我们可以看出HttpUtility.UrlEncode对冒号(:)和斜杠(/)进行了编码所以不能用来对网址进行编码。 那么能不能对参数进行编码呢答案也是否定的。因为在参数中空格应该被编码为%20而不是被HttpUtility.UrlEncode编码为加号()所以不推荐用这两个方法对URI进行编码。 Uri.EscapeUriString:用于对网址编码(不包含参数) 我们还是用例子说话 string url1 http://www.cnblogs.com/a file with spaces.html?a1b博客园#abc;Response.Write( Uri.EscapeUriString(url1));//outputs:http://www.cnblogs.com/a%20file%20with%20spaces.html?a1b%E5%8D%9A%E5%AE%A2%E5%9B%AD#abc 可以看出Uri.EscapeUriString对空格进行了编码也对中文进行了编码但对冒号(:)、斜杠(/)和井号(#)未编码所以此方法可以用于网址进行编码但不能对参数进行编码作用类似JavaScript中的encodeURI方法。 Uri.EscapeDataString:用于对网址参数进行编码 仍然用例子说话 string url1 http://www.cnblogs.com/a file with spaces.html?a1b博客园#abc;Response.Write(Uri.EscapeDataString(url1));//outputs:http%3A%2F%2Fwww.cnblogs.com%2Fa%20file%20with%20spaces.html%3Fa%3D1%26b%3D%E5%8D%9A%E5%AE%A2%E5%9B%AD%23abc 可以看出Uri.EscapeDataString对冒号(:)、斜杠(/)、空格、中文、井号(#)都进行了编码所以此方法不可以用于网址进行编码但可以用于对参数进行编码作用类似JavaScript中的encodeURIComponent方法。 小结 在JavaScript中推荐的做法是用encodeURI对URI的网址部分编码用encodeURIComponent对URI中传递的参数进行编码。 在C#中推荐的做法是用Uri.EscapeUriString对URI的网址部分编码用Uri.EscapeDataString对URI中传递的参数进行编码。 解码部分就不说了与编码方法相对应。转载于:https://www.cnblogs.com/waw/p/3706807.html