永川网站设计,网址经营是什么,腾讯企业邮箱域名购买,做网站阜新js中escape,encodeURI,encodeURIComponent函数和unescape,decodeURI和decodeURIComponent函数的功能1.escape方法对String对象编码,escape方法返回一个包含了转义序列的字符串值。除了ASCII字母和数字#xff0c;以及这几个符号 *-/._外(共有1052769个字符不会被编…js中escape,encodeURI,encodeURIComponent函数和unescape,decodeURI和decodeURIComponent函数的功能1.escape方法对String对象编码,escape方法返回一个包含了转义序列的字符串值。除了ASCII字母和数字以及这几个符号 *-/._外(共有1052769个字符不会被编码)其他所有的字符都会被转义序列替换标准ASCII码内的字符(0-127)和扩展的ASCII码内的字符(128-255)都用%xx编码形式代替。字符值大于255的以unicode%uxxxx格式存储。注意 :escape方法不能够用来对统一资源标示符URI进行编码,因为?#等会被编码.对URI编码应使用encodeURI,对URI参数用encodeURIComponent方法。encodeURI除了ASCII字母和数字以及这几个符号 *-/._!#$\(),:?~外(共有10522082个字符不会被编码)其他所有的字符都会被转义序列替换标准ASCII码内的字符(0-127)和扩展的ASCII码内的字符(128-255)都用%xx编码形式代替。字符值大于255的以utf-8多字节%xx格式存储。在URI中有特殊意义的字符如?等不会被编码。encodeURIComponent除了ASCII字母和数字以及这几个符号 *-_.~!()外(共有1052971个字符不会被编码)其他所有的字符都会被转义序列替换标准ASCII码内的字符(0-127)和扩展的ASCII码内的字符(128-255)都用%xx编码形式代替。字符值大于255的以utf-8多字节%xx格式存储。可以看到?等在URI中有特殊意义的字符也会被编码。encodeURIComponent方法在编码单个URIComponent(指请求参数)应当是最常用的它可以将参数中的中文、特殊字符进行转义而不会影响整个URL。一个测试的JSP实例:utilitsfunction writeToDom(str){document.writeln(str);}function writelnToDom(str){document.writeln(str );}function writeURL(type,str){document.writeln(type : str );}test encoding decodingrequest.setCharacterEncoding(utf-8);String param request.getParameter(param);System.out.println(original param);String urlEncodedparam URLEncoder.encode(param中文value123NXX*-/._!#$\(),:?~YES^,UTF-8);out.write(server side output ------------------------------------------------------- );out.write(original param: param);out.write(decoded from original param: URLDecoder.decode(request.getParameter(param),UTF-8));%writelnToDom( client side output---------------------------------------------);var scriptVarencdec.jsp?param中文value123NXX*-/._YESwriteURL(escape,escape(scriptVar));var enuriencdec.jsp?param中文value123NXX*-/._!#$\(),:?~YES^;writeURL(encodeURI,encodeURI(enuri)); //只有这个做法的URL最终可用被正确访问var enuricompencdec.jsp?param中文value123NXX*-_.~!\()YES^;writeURL(encodeURIComponent,encodeURIComponent(enuricomp));writeURL(URLEncoder,);writeURL(response encodeurl,);writeURL(plain url,encdec.jsp?param中文valueotherabcd);writelnToDom(unescape URLEncoder: unescape());writelnToDom(decodeURI URLEncoder: decodeURI());writelnToDom(decodeURIComponent URLEncoder: decodeURIComponent());访问http://localhost:8080/prjWebSec/encode/encdec.jsp?param中文value123NXX*-/._!#$(),:?~YES^输出为server side output -------------------------------------------------------original param: 中文value123NXX* -/._!decoded from original param: 中文value123NXX* -/._!client side output---------------------------------------------escape:encdec.jsp%3Fparam%3D%u4E2D%u6587value%3E123NXX*-/._YES%3C%5EencodeURI:encdec.jsp?param%E4%B8%AD%E6%96%87value%3E123NXX*-/._!#$(),:?~YES%3E%5EencodeURIComponent:encdec.jsp%3Fparam%3D%E4%B8%AD%E6%96%87value%3E123NXX*-_.~!()YES%3E%5EURLEncoder:param%3D%E4%B8%AD%E6%96%87value%3E123NXX*%2B-%2F.%40_%21%23%24%26%27%28%29%2C%3A%3D%3F%7EYES%3E%5Eunescape URLEncoder:param??-???value123NXX*-/._!#$(),:?~YES^decodeURI URLEncoder:param%3D中文value123NXX*%2B-%2F.%40_!%23%24%26()%2C%3A%3D%3F~YES^decodeURIComponent URLEncoder:param中文value123NXX*-/._!#$(),:?~YES^可以看到escape和encodeURIComponent都会将? 等在URI中有特殊意义的字符进行了编码.这样的话,URL就不能被正常访问了.[如果你是在tomcat中测试的话,需要在server.xml中加上URIEncodingUTF-8/] 2.unescape方法,解码用escape方法进行了编码的String对象。 unescape方法返回一个包含charstring内容的字符串值。 所有以%xx十六进制形式编码的字符都用ASCII字符集中等价的字符代替。 以%uxxxx格式(Unicode字符)编码的字符用十六进制编码xxxx对应的Unicode字符代替. 注意:unescape方法不能用于解码统一资源标识码(URI)。escape和unescape以经不推荐使用。 解码encodeURI和encodeURIComponent编码过的内容用decodeURI和decodeURIComponent方法。 JAVA代码中的URLEncoder.encode方法和JS的encodeURIComponent功能差不多,所以不应该用来对URI做encoding 只应该对URI中的某一个参数值做编码。它会将处字母和数字,以及*字符外的都编码成%xx形式. JS的unescape和decodeURI都不能用来解码JAVA中URLEncoder.encode编码的字符串。 在JAVA代码中的URLEncoder.encode的字符串可以在JS中用decodeURIComponent还原成字符串。 在JAVA代码中可以用URLDecoder.decode(request.getParameter(param),UTF-8)来将在JS中 用encodeURIComponent的参数还原成字符串。