当前位置:首页 > 开发 > Web前端 > JavaScript > 正文

linux系统服务器下jsp传参数乱码

发表于: 2015-07-01   作者:3213213333332132   来源:转载   浏览:
摘要: 在一次解决乱码问题中, 发现jsp在windows下用js原生的方法进行编码没有问题,但是到了linux下就有问题, escape,encodeURI,encodeURIComponent等都解决不了问题 但是我想了下既然原生的方法不行,我用el标签的方式对中文参数进行加密解密总该可以吧。于是用了java的java.net.URLDecoder,结果还是乱码,最后在绝望之际,用了下面的方法解决了
在一次解决乱码问题中, 发现jsp在windows下用js原生的方法进行编码没有问题,但是到了linux下就有问题, escape,encodeURI,encodeURIComponent等都解决不了问题
但是我想了下既然原生的方法不行,我用el标签的方式对中文参数进行加密解密总该可以吧。于是用了java的java.net.URLDecoder,结果还是乱码,最后在绝望之际,用了下面的方法解决了问题

在EL表达式自定义扩展函数库中的加入
 <function>
        <description>url字符编码</description>
        <name>encodeWord</name>
        <function-class>com.miri.boss.comm.util.ELFunction</function-class>
        <function-signature> 
             java.lang.String encodeWord(java.lang.String) 
        </function-signature> 
        <example>${f:encodeWord('要编码的字符串')}</example>
    </function>
    <function>
        <description>url字符解码</description>
        <name>decodeWord</name>
        <function-class>com.miri.boss.comm.util.ELFunction</function-class>
        <function-signature> 
             java.lang.String decodeWord(java.lang.String) 
        </function-signature> 
        <example>${f:decodeWord('要解码的字符串')}</example>
    </function>


ELFunction.java中写加解密方法
/**
	 * 对字符串escape编码
	 * 
	 * @param word
	 * @return
	 */
	public static String encodeWord(String word)
	{
		int i;
		char j;
		StringBuffer tmp = new StringBuffer();
		tmp.ensureCapacity(word.length() * 6);
		for (i = 0; i < word.length(); i++)
		{
			j = word.charAt(i);
			if (Character.isDigit(j) || Character.isLowerCase(j) || Character.isUpperCase(j))
				tmp.append(j);
			else if (j < 256)
			{
				tmp.append("%");
				if (j < 16)
					tmp.append("0");
				tmp.append(Integer.toString(j, 16));
			}
			else
			{
				tmp.append("%u");
				tmp.append(Integer.toString(j, 16));
			}
		}
		return tmp.toString();
	}
	
	/**
	 * 对escape码进行unescape解码
	 * 
	 * @param word
	 * @return
	 */
	public static String decodeWord(String word)
	{
		StringBuffer tmp = new StringBuffer();
		tmp.ensureCapacity(word.length());
		int lastPos = 0, pos = 0;
		char ch;
		while (lastPos < word.length())
		{
			pos = word.indexOf("%", lastPos);
			if (pos == lastPos)
			{
				if (word.charAt(pos + 1) == 'u')
				{
					ch = (char) Integer.parseInt(word.substring(pos + 2, pos + 6), 16);
					tmp.append(ch);
					lastPos = pos + 6;
				}
				else
				{
					ch = (char) Integer.parseInt(word.substring(pos + 1, pos + 3), 16);
					tmp.append(ch);
					lastPos = pos + 3;
				}
			}
			else
			{
				if (pos == -1)
				{
					tmp.append(word.substring(lastPos));
					lastPos = word.length();
				}
				else
				{
					tmp.append(word.substring(lastPos, pos));
					lastPos = pos;
				}
			}
		}
		return tmp.toString();
	}

在jsp页面中引入
<%@ taglib prefix="ks" uri="http://www.miri.com/elfunction" %>

页面中对中文参数的加密(两次加密)
${ks:encodeWord(ks:encodeWord(programList.channelName))}

页面中对中文参数的解密
${ks:decodeWord(param.channelName)}

linux系统服务器下jsp传参数乱码

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
佟强 http://blog.csdn.net/microtong OakCMS内容管理系统 http://www.oakcms.cn http://www.oakcms
佟强 http://blog.csdn.net/microtong OakCMS内容管理系统 http://www.oakcms.cn http://www.oakcms
在linux(ubuntu)系统中,默认挂载windows下的FAT32(VFAT)文件系统分区后,其中的中文文件名会变成
jsp向servlet传值,有两种方式,get方式和post方式。 1.get方式,一般get方式的传递有两种分别是:超
转自:http://blog.csdn.net/jgwei/article/details/41006433 上一篇文章里面, 主要讲解了文件编码
返回的数据是 处理到表格中 tables.dataTable( { "sDom": "<'row-fluid'<'span6'l><'sp
问题: 查找原因: mysql>show variables like '%char%'; 回车后显示: +----------------------+
现象: 进入vi后 解决思路:修改原来的配置文件。 配置文件是 /etc/sysconfig/i18n 用vi编辑器打开
最近,有需求需要传参数到jsp页面,但是不知道该如何传参数到jsp页面!!! 废话少说,贴代码。。。
首先在保证a.jsp页面是utf-8编码 <%@ page language="java" import="java.util.*" pageEncoding=
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号