在一次解决乱码问题中, 发现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)}
分享到:
相关推荐
项目进行到和服务器交互,通过post访问服务器端jsp,jsp访问服务器端mysql数据库,最终返回到客户端的中文出现乱码问题。 在整个流程中,出现错误的原因可能是三个:post未设置编码或者编码不相符合,jdbc出现问题,...
2、 修复了:在某些运行环境中(例如在 LINUX下的 Weblogic10.3 服务器上)用户无法正常上传附件的问题 3、 修复了:审核主题和审核回复操作中可能存在的安全隐患。 4、 修复了:隐藏版块出现在统计-版块排行中的...
2、 修复了:在某些运行环境中(例如在 LINUX下的 Weblogic10.3 服务器上)用户无法正常上传附件的问题 3、 修复了:审核主题和审核回复操作中可能存在的安全隐患。 4、 修复了:隐藏版块出现在统计-版块排行中的...
程序在windows\linux服务器下运行没问题 在客户端简体系统测试没问题; 在客户端繁体系统中如果被打包文件包含中文会有乱码现象(如有解决办法请告诉我,现在做的只能判断繁简客户端决定输出文件名); import 中的 ...
2、 修复了:在某些运行环境中(例如在 LINUX下的 Weblogic10.3 服务器上)用户无法正常上传附件的问题 3、 修复了:审核主题和审核回复操作中可能存在的安全隐患。 4、 修复了:隐藏版块出现在统计-版块排行中的...
2、 修复了:在某些运行环境中(例如在 LINUX下的 Weblogic10.3 服务器上)用户无法正常上传附件的问题 3、 修复了:审核主题和审核回复操作中可能存在的安全隐患。 4、 修复了:隐藏版块出现在统计-版块排行中的...
小练习小项目练手使用JSP实现页面显示使用Servlet进行流程控制使用JavaBean实现业务封装使用数据源+JDBC访问数据库使用jQuery进行页面交互使用过滤器完成中文乱码的问题使用Servlet 3.0的注解实现Servlet声明使用...
上网找了一些资源,才弄明白这是编码... 最后找到一个在linux下的头文件,它实现了各种编码的转换。使用方法如下: 代码如下:int Gb2312toUtf8(char *inbuf,char *outbuf) { #ifdef ISCHANGE iconv_t cd; int inlen,out
tomcat/bin/catalina.bat 如果是linux 就是 catalina. sh 在rem 的后面增加如下参数 set JAVA_OPTS= -Xms256m -Xmx256m -XX:MaxPermSize=64m 2 修改Tomcat的JDK目录 打开tomcat/bin/catalina.bat 在最后一个rem...
为了性能考虑,歌词的搜索目录不会往下递归,只搜索设置的那一级目录. 3,歌词的设置更为丰富,很多地方以前是固定的,现在都是可以改变的,并且增加了纵向显示歌词的卡拉OK显示功能,还支持字体是否抗锯齿显示的选项....
还有的同学,遇到了在Linux下的Shell编程,就恨不得把Shell先学成专家才肯,或者是才敢,继续往下学习;有没有过这样的感觉,一本书的上册没有学好,觉着下册心里也没底儿,甚至非要把上册复习一遍才敢继续学习。...
{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...