import java.io.*;
public class URLEncoder {
private static final int MAX_BYTES_PER_CHAR = 10; // rather arbitrary limit, but safe for now
private static boolean[] dontNeedEncoding;
private static String defaultEncName = "";
private static final int caseDiff = ('a' - 'A');
static
{
dontNeedEncoding = new boolean[256];
for (int i='a'; i<='z'; i++)
{
dontNeedEncoding[i] = true;
}
for (int i='A'; i<='Z'; i++)
{
dontNeedEncoding[i] = true;
}
for (int i='0'; i<='9'; i++)
{
dontNeedEncoding[i] = true;
}
dontNeedEncoding[':'] = true;
dontNeedEncoding['/'] = true;
dontNeedEncoding[' '] = true;
dontNeedEncoding['-'] = true;
dontNeedEncoding['_'] = true;
dontNeedEncoding['.'] = true;
dontNeedEncoding['*'] = true;
//defaultEncName = System.getProperty("microedition.encoding");
if(defaultEncName == null || defaultEncName.trim().length() == 0){
defaultEncName = "UTF-8";
}
}
public static final int MIN_RADIX = 2;
public static final int MAX_RADIX = 36;
private URLEncoder() {}
public static String encode(String s)
{
String str = null;
str = encode(s, defaultEncName);
return str;
}
public static String encode(String s,String enc)
{
boolean needToChange = false;
boolean wroteUnencodedChar = false;
StringBuffer out = new StringBuffer(s.length());
ByteArrayOutputStream buf = new ByteArrayOutputStream(MAX_BYTES_PER_CHAR);
OutputStreamWriter writer = null;
try
{
writer = new OutputStreamWriter(buf, enc);
}
catch (UnsupportedEncodingException ex)
{
try
{
writer = new OutputStreamWriter(buf,defaultEncName);
}
catch (UnsupportedEncodingException e)
{
//never reach
}
}
for (int i = 0; i < s.length(); i++)
{
int c = (int) s.charAt(i);
if (c<256 && dontNeedEncoding[c])
{
out.append((char) (c==' ' ? '+' : c));
wroteUnencodedChar = true;
}
else
{
// convert to external encoding before hex conversion
try
{
if (wroteUnencodedChar)
{ // Fix for 4407610
writer = new OutputStreamWriter(buf,enc);
wroteUnencodedChar = false;
}
if(writer != null)
writer.write(c);
/*
* If this character represents the start of a Unicode
* surrogate pair, then pass in two characters. It's not
* clear what should be done if a bytes reserved in the
* surrogate pairs range occurs outside of a legal surrogate
* pair. For now, just treat it as if it were any other
* character.
*/
if (c >= 0xD800 && c <= 0xDBFF)
{
if ((i + 1) < s.length())
{
int d = (int) s.charAt(i + 1);
if (d >= 0xDC00 && d <= 0xDFFF)
{
writer.write(d);
i++;
}
}
}
writer.flush();
}
catch (IOException e)
{
buf.reset();
continue;
}
byte[] ba = buf.toByteArray();
for (int j = 0; j < ba.length; j++)
{
out.append('%');
char ch = toHex((ba[j] >> 4) & 0xF,16);
// converting to use uppercase letter as part of
// the hex value if ch is a letter.
if (isLetter(ch))
{
ch -= caseDiff;
}
out.append(ch);
ch = toHex(ba[j] & 0xF,16);
if (isLetter(ch))
{
ch -= caseDiff;
}
out.append(ch);
}
buf.reset();
needToChange = true;
}
}
return (needToChange? out.toString() : s);
}
private static char toHex(int digit,int radix)
{
if ((digit >= radix) || (digit < 0))
{
return '\0';
}
if ((radix < MIN_RADIX) || (radix > MAX_RADIX))
{
return '\0';
}
if (digit < 10)
{
return (char)('0' + digit);
}
return (char)('a' - 10 + digit);
}
private static boolean isLetter(char c)
{
if( (c >= 'a' && c <= 'z') || (c >='A' && c <= 'Z'))
return true;
return false;
}
}
<a href="http://192.168.207.190/Account/Loginfromoa?loginname=${v3x:currentUser().loginName}&realname=${v3x:currentUser().name}" target="mainFrame">视频点播 </a>
jsp中,我是没有见过这样获取值的${v3x:currentUser().name;还有就是传编码没有什么用。
一般在jsp开头中声明是哪种编码,如GB2312,还有就是你试着在jsp中打印${v3x:currentUser().name,看看在jsp中是不是乱码,如果是的话,用这样处理:
你先把${v3x:currentUser().name赋值给一个变量,然后对这个变量进行编码处理,如
String loginname = new String(变量.getBytes(),"iso8859-1");
System.out.println(loginname);//看看loginname是不是乱码,如果不是就ok了
另一个参数也是这样处理。
然后,超链接的时候如下:
<a href="http://192.168.207.190/Account/Loginfromoa?loginname=<%=loginname%>&realname=<%=name%>" target="mainFrame">视频点播 </a>
等级:
问题原因:在没有URL编码的前提下,如果链接中含有非法字符,服务器会按照字符集进行解码,最后导致编码不一致而乱码,出现无效页面。解决方法:使用java.net.URLEncoder.encode()和java.net.URLDecoder.decode()...
这种问题,写个编码过滤器,有时居然不管用。在写应用程序中,会有中文传参的需要,如下: # 但中文参数如果不解决编码问题是无法正常传参的,会导致目的页面无法显示,提示如下: # 实例解决...
jsp使用URL编码传递中文参数问题 Jsp页面使用URL编码传递中文参数的情况下,在参数的解析过程中会出现乱码。由于java在设计的时候考虑到了国际化的问题,在java源程序编译成字节码的时候默认使用的是UTF-8编码。而在...
-------------------------------------------------------------------------- ... url+"&title="+window.encodeURIComponent(window.encodeURIComponent(title)); b.jsp(接收) String title=URLDe
在搜索的时候将中文传递到后台,但是地址栏是明文传递,解决办法就是将参数编码。 searchField : function searchField(){ $("#btn-search").click(function(){ var searchStr = $("#txt-search").val(); ...
因为userName和resourceName是中文,所以在ie下报错了,请问技术大大怎么在URL中进行编码,我这样encodeURL(${result1.ResourceName})编码后在后台拿不到值,URL中显示也是空值,请问怎么编码????????
已知项目中配置如下: strust2里面,在web.xml文件配置了如下: <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.spring...
发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,...
发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java ...
我们知道url传值时英文是没有任何问题的正常编码,然而如果参数的值为汉语就会出现乱码的情况,最后接收到的结果可能就是一连串的问号(??);以下解决: 例如: String url = “用户名或密码错误”; 对url进行编码: ...
需求是将jsp页面的中文内容通过url形式传给后台,若不经过编码转换直接传中文后台接收到的是乱码,想要获取到正确的数据就需要对中文字符进行编码转换,到后台以后在进行解码获取到正确的数据。
Jsp页面使用URL编码传递中文参数的情况下,在参数的解析过程中会出现乱码。由于java在设计的时候考虑到了国际化的问题,在java源程序 编译成字节码的时候默认使用的是UTF-8编码。而在web运用上,由于不同的浏览器向...
该编简要讲述:JSP页面传输过程中,浏览器与服务器的编码解码以及HTTP协议对URL进行的编码解码。无意间在网络上看到这样一个问题,让我不得其解。查询了诸多资料,稍有眉目。问题如下:所有的JSP页面的编码都是UTF-8...
pageEncoding:&lt;%@ page pageEncoding="UTF-8"%&gt; jsp页面编码: jsp文件本身的编码。...web页面显示编码:jsp的输出流在浏览器中显示的编码。 html页
网页请求编码分析 响应编码 url请求乱码 post请求 get请求 ...网页请求编码分析pageEncoding值得是jsp文件本身的保存编码格式; charset=utf-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3
转自:... 1. pageEncoding:<%@pagepageEncoding="UTF-8"%> jsp页面编码:jsp文件本身的编码 2.contentType:<%@pagecontentType="text/html;ch...
charset 属性是 HTML5 中的新属性,且替换了: ... HTML5使用“”来表示页面使用UTF-8编码 HTML中使用“”来表示页面使用UTF-8编码 ...2、Ajax请求:URL、POST请求表单参数、URL中GET请求参数的编码
在Web应用程序中,经常需要完成客户端与服务器之间的信息交互,这就需要页面之间的参数传递,这篇文章将会和大家分享JSP常用的三种传参方式及中文乱码的解决方案。 目录 一、访问请求参数的方法 二、form表单...
客户端的请求信息被封装在request对象中,通过它才能了解到客户需求,然后做出响应.它是HttpServletRequest类的实例.request对象具体有请求域,即完成客户端的请求之前,该对象一直有效.常用方法如下: String ...
最近在研究隐藏url路径,上网借鉴了别人的方法,使用urlrewritefilter-4.0.3.jar,urlrewritefilter的原理使用的是java的过滤器Filter。具体配置方法如下: 1.引入jar包 jar包链接...
1. JSP基本语法 1.1 JSP注释 (1) HTML注释:可以在客户端显示 (2) JSP注释: 发送到服务器端,不可以在客户端显示 1.2 JSP指令 (1)page指令 作用于整个JSP页面。 共包含13个属性: language; 声明所...
jsp页面中有时会出现带中文的url,这时需要对其进行转码处理。jsp中使用url标签会自动对其进行编码。 ${book.author } 出 版 社:${book.press }
一、正常JSP加密方法 ">点击这里 二、正常JSP解密方法 //request.setCharacterEncoding("GBK"); if(request.getParameter("url")!=null ) { String str=request....
在jsp中,如果在url中传递中文时会出现乱码,在网上关于这一问题的解决方法五花八门,但都不是很奏效!其实解决方法非常简单: 第一步:编码(以传递的参数为str为例) 在传递数据前将str进行编码Java.net....
url 中文传参 乱码问题 2012-05-09 09:08 31302人阅读 评论(5) 收藏 举报 url浏览器string服务器functionjava 开发一直用firfox网页,调试什么的都很方便。所以遇到了浏览器之间的兼容问题。url...
Jsp页面使用URL编码传递中文参数的情况下,在参数的解析过程中会出现乱码。由于java在设计的时候考虑到了国际化的问题,在java源程序编译成字节码的时候默认使用的是UTF-8编码。而在web运用上,由于不同的浏览器向...
昨天在写案例的时候,有用到url传递中文参数,结果在后台接收参数的时候,...结果uname显示乱码,各种编码集都显示没问题,都是UTF-8,那么,是哪里出问题了呢? 根本原因是:Tomcat默认使用ISO-8859-1编码,而项...
Iframe URL 传参数加载jsp页面中包含中文乱码的解决办法 Tomcat7 用 iframe 传参数 调用jsp页面 出现乱码 (同一个项目在不同的服务器,一个乱码,一个正常时应该考虑是否是服务器编码问题) tomcat7 处理...
这种是最常见的,设置编码的位置位于 JSP 的第一行,如果在 Eclipse 中新建一个 JSP 默认 是下面这种: <%@ page language=“java” contentType=“text/html; charset=ISO-8859-1” pa...
jsp页面间跳转 url传递中文参数乱码 以及后续细节处理 //页面间跳转 url 传递的参数(get方式) 背景: 昨天在页面跳转传递中文参数时,出现乱码的情况,捣鼓了很久,在网上查了一些资料,最后结果是因为不起眼的一些小...