jsp File browser 1.2(jsp网马)解决中文乱码问题

jsp File browser 1.2这个工具还是比较好用的,支持简单的文件操作,作者在写的时候没有考虑到在非英文系统下的乱码问题,导致很多操作都无法实现,近期正好有空,就做了乱码修复。

简单来看下:

作者在写的时候直接把编码写成了ISO-8859-1,压根没想中文正常显示的想法吧。。

我们可以全部设定编码为UTF-8来解决乱码问题,但是他在代码里都只直接使用request.getParameter(“key”)方式来进行数据的获取的,如果是get提交数据上去的话,不用说,数据肯定都是不正常的,而且作者使用post方式提交文件路径(文件路径的URL在返回的时候进行了URLEncode,但是没有指定编码)。

简单想了下解决办法:

1.针对post方法提交数据大部分都是正常的,不做处理

2.针对get提交的普通数据,要进行返回到字节码,再重新编码的过程(服务器用iso8859错误解码了)。

3.URLEncode过的数据,使用post传回来,这个要进行url解码。

具体实施:

编码统一使用UTF-8,URLEncode的时候指定编码。URLDecode的时候也使用指定编码。

使用一张HashMap来保持进行乱码处理后的数据,然后要获取数据的时候从hashmap里面去取。

	// 自定义获取对象方法
	static String getParameter(String name){
		String[] obj = (String[])hm.get(name);
		if(obj!=null && obj.length>=1){
			return obj[0];
		}
		return null;
	}
	static String[] getParameterValues(String name){
		String[] values = (String[]) hm.get(name);
		return values;
	}

       // 定义个hashmap,来放所有的数据
	hm = new HashMap();
	// 如果是post的话直接拷贝
	if(request.getMethod()=="POST"){
		Enumeration enumeration = request.getParameterNames();
		while(enumeration.hasMoreElements()){
			String nameStr = enumeration.nextElement().toString();
			String values[] = request.getParameterValues(nameStr);
			if("selfile".equals(nameStr)){
				//因为这个数据是在服务器编码 ,传给浏览器,然后浏览器post回来的
				for(int i=0;i<values.length;i++){
					values[i] = URLDecoder.decode(values[i],ENCODE);
				}
			}
			hm.put(nameStr,values);
		}
	}else{
		// 遍历全部参数转码  iso-8859-1  到 utf-8 通过url提交 被服务器以iso-8859-1解码了
		Enumeration enumeration = request.getParameterNames();
		while(enumeration.hasMoreElements()){
			String nameStr = enumeration.nextElement().toString();
			String values[] = request.getParameterValues(nameStr);
			// 遍历转换
			for(int i=0;i<values.length;i++){
				values[i] = new String(values[i].getBytes("iso-8859-1"),ENCODE);
			}
			hm.put(nameStr,values);
		}
	}
// 使用的时候 这么使用
request.setAttribute("dir", getParameter("dir"));

这么修改以后添加删除,命令行的使用都可以支持中文了。
点击下载:adminfix