史上最全面的前后台传参数、乱码问题解决

10 篇文章 0 订阅

1、前台后台转码方案

描述:使用get请求和地址栏请求时,传递中文参数会出现乱码问题,我感觉这是最有效的解决方法。
解决:
前台传参之前转码:

//在name包含中文时,请求之前进行三次编码
var name =  encodeURI(encodeURI(encodeURI($('#name').val())));
var url = "chooseLike?name="+name;
location.href= url;

后台接收时

//接收时 tomcat会进行一次解码操作,只需要再解码两次
String name = java.net.URLDecoder.decode(java.net.URLDecoder.decode(name,"UTF-8"),"UTF-8"));

2、ssm项目xml配置

web.xml 中***web-app*** 标签下添加过滤器配置
此方法对路径传中文参数无效。。。。

<!-- 处理乱码 -->
  <filter> 
       <filter-name>characterEncodingFilter</filter-name> 
       <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
       <init-param> 
           <param-name>encoding</param-name> 
           <param-value>UTF-8</param-value> 
       </init-param> 
       <init-param> 
           <param-name>forceEncoding</param-name> 
           <param-value>true</param-value> 
       </init-param> 
   </filter> 
   <filter-mapping> 
       <filter-name>characterEncodingFilter</filter-name> 
       <url-pattern>/*</url-pattern> 
   </filter-mapping>

3. 字符过滤器

定义自定义过滤器,设置编码
1.定义过滤器 CharacterFilter.java


public class CharacterFilter implements Filter{

	@Override
	public void destroy() {
		
	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
			throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest)req;
		HttpServletResponse response = (HttpServletResponse)resp;
		
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
		chain.doFilter(request, response);
		
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		
	}

}

2.在web.xmlweb-app 标签下添加过滤器配置

<!--过滤器 character -->
	<filter>
		<filter-name>Character</filter-name>
		<filter-class>com.data.order.filter.CharacterFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>Character</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

4、通过request请求,获取并设置编码

后台接收数据时转码 new String()

String fileName = new String(request.getParameter("fileName").getBytes("iso-8859-1"),"utf-8");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成年人的苦衷

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值