`
3213213333332132
  • 浏览: 78667 次
社区版块
存档分类
最新评论

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

    博客分类:
  • jsp
阅读更多
在一次解决乱码问题中, 发现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)}
1
1
分享到:
评论

相关推荐

    linux下mysql乱码问题的解决方案

    项目进行到和服务器交互,通过post访问服务器端jsp,jsp访问服务器端mysql数据库,最终返回到客户端的中文出现乱码问题。 在整个流程中,出现错误的原因可能是三个:post未设置编码或者编码不相符合,jdbc出现问题,...

    JspRun!社区论坛系统 v6.0.0 build 20110516 GBK 源码版.zip

    2、 修复了:在某些运行环境中(例如在 LINUX下的 Weblogic10.3 服务器上)用户无法正常上传附件的问题 3、 修复了:审核主题和审核回复操作中可能存在的安全隐患。 4、 修复了:隐藏版块出现在统计-版块排行中的...

    JspRun!社区论坛系统 v6.0.0 build 20110516 UTF-8 安装版.zip

    2、 修复了:在某些运行环境中(例如在 LINUX下的 Weblogic10.3 服务器上)用户无法正常上传附件的问题 3、 修复了:审核主题和审核回复操作中可能存在的安全隐患。 4、 修复了:隐藏版块出现在统计-版块排行中的...

    jsp读取数据库,打包多个文件下载

    程序在windows\linux服务器下运行没问题 在客户端简体系统测试没问题; 在客户端繁体系统中如果被打包文件包含中文会有乱码现象(如有解决办法请告诉我,现在做的只能判断繁简客户端决定输出文件名); import 中的 ...

    JspRun!社区论坛系统 v6.0.0 build 20110516 GBK 安装版.zip

    2、 修复了:在某些运行环境中(例如在 LINUX下的 Weblogic10.3 服务器上)用户无法正常上传附件的问题 3、 修复了:审核主题和审核回复操作中可能存在的安全隐患。 4、 修复了:隐藏版块出现在统计-版块排行中的...

    JspRun!社区论坛系统 v6.0.0 build 20110516 UTF-8 源码版.zip

    2、 修复了:在某些运行环境中(例如在 LINUX下的 Weblogic10.3 服务器上)用户无法正常上传附件的问题 3、 修复了:审核主题和审核回复操作中可能存在的安全隐患。 4、 修复了:隐藏版块出现在统计-版块排行中的...

    FruitSys_java编程_易买网_jsp_

    小练习小项目练手使用JSP实现页面显示使用Servlet进行流程控制使用JavaBean实现业务封装使用数据源+JDBC访问数据库使用jQuery进行页面交互使用过滤器完成中文乱码的问题使用Servlet 3.0的注解实现Servlet声明使用...

    ajax 乱码的一种解决方法

    上网找了一些资源,才弄明白这是编码... 最后找到一个在linux下的头文件,它实现了各种编码的转换。使用方法如下: 代码如下:int Gb2312toUtf8(char *inbuf,char *outbuf) { #ifdef ISCHANGE iconv_t cd; int inlen,out

    Tomcat源码研究

     tomcat/bin/catalina.bat 如果是linux 就是 catalina. sh 在rem 的后面增加如下参数 set JAVA_OPTS= -Xms256m -Xmx256m -XX:MaxPermSize=64m 2 修改Tomcat的JDK目录  打开tomcat/bin/catalina.bat 在最后一个rem...

    YOYOPlayer1.1

    为了性能考虑,歌词的搜索目录不会往下递归,只搜索设置的那一级目录. 3,歌词的设置更为丰富,很多地方以前是固定的,现在都是可以改变的,并且增加了纵向显示歌词的卡拉OK显示功能,还支持字体是否抗锯齿显示的选项....

    JAVA自学之路

    还有的同学,遇到了在Linux下的Shell编程,就恨不得把Shell先学成专家才肯,或者是才敢,继续往下学习;有没有过这样的感觉,一本书的上册没有学好,觉着下册心里也没底儿,甚至非要把上册复习一遍才敢继续学习。...

    Java学习笔记-个人整理的

    {1.13}Linux命令}{41}{section.1.13} {1.13.1}基本查看、移动}{41}{subsection.1.13.1} {1.13.2}权限}{42}{subsection.1.13.2} {1.13.3}打包备份与恢复}{42}{subsection.1.13.3} {1.13.3.1}\texttt {tar},\text...

Global site tag (gtag.js) - Google Analytics