日期:2014-05-16  浏览次数:20480 次

JavaScript转义字符(js中escape,encodeURI,encodeURIComponent三个函数的区别)【转】

js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent

1、 传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等特殊字符截断。

例如:<script language="javascript">document.write('<a href="http://passport.baidu.com/?logout&aid=7&u='+encodeURIComponent("http://cang.baidu.com/bruce42")+'">退出</a>');</script>

2、 进行url跳转时可以整体使用encodeURI

例如:Location.href=encodeURI("http://cang.baidu.com/do/s?word=百度&ct=21");

3、 js使用数据时可以使用escape

[Huoho.Com编辑]

例如:搜藏中history纪录。

4、 escape对0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。


最多使用的应为encodeURIComponent,它是将中文、韩文等特殊字符转换成utf-8格式的url编码,所以如果给后台传递参数需要使用encodeURIComponent时需要后台解码对utf-8支持(form中的编码方式和当前页面编码方式相同)

escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z

encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

?

附:

转义字符的解析:

java.net.URLDecoder.decode(str);

?

附注:jsp传递中文参数乱码问题的解决。(web服务器:tomcat6,页面字符集编码:utf-8)

1.在tomcat6中设置字符集编码:

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>

2.定义转换字符集编码filter

定义filter

import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class CharsetCodingFilter implements javax.servlet.Filter{
private String charset;
public void destroy() {
// TODO Auto-generated method stub

}

public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
req.setCharacterEncoding(charset);
res.setContentType("text/html;charset="+charset);
chain.doFilter(req, res);
}

public void init(FilterConfig config) throws ServletException {
// TODO Auto-generated method stub
this.charset=config.getInitParameter("charset");
}

}

web.xml

<!-- 编码转换 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.sagacity.framework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

3.在中文参数中,使用encodeURIComponent。

"abc.jsp?param="+encodeURIComponent("中文参数");