1. 使用 JS 中的 encodeURIC
说明:
encodeURIC
对传递参数进行设置。
例:
var url = “<a href=’http
encodeURI(
对 URL 整体转换。不编码字符
例:
var url = “<a href=’” + encodeURI(
乱码处理实例:
//////////
初始页面内容如下 (hello.jsp
//////////
<%@ page language="
<%String path = request.ge
<!DOCTYPE HTML PUBLIC "-//W3C//D
<html>
<head>
<title>AJA
<meta http-equiv
<script type="text
function justdo(){
var post="name
post = encodeURI(
post = encodeURI(
var xmlObj = new ActiveXObj
var URL = '<%= path%>/pag
xmlObj.ope
xmlObj.set
xmlObj.set
xmlObj.sen
}
</script>
</head>
<body>
<input type="butt
</body>
</html>
//////////
//////////
<%@ page language="
<%String path = request.ge
<!DOCTYPE HTML PUBLIC "-//W3C//D
<
<html>
<head>
<title>aja
<meta http-equiv
<meta http-equiv
<meta http-equiv
</head>
<body>
<%
//
for (Enumerati
String h = (String) e.nextElem
String v = request.ge
String mm = java.net.U
System.out
}
%>
</body>
</html>
//////////
说明:
java.net.U
为什么要连续两次调用 encodeURI(
2. 使用 JS 中的 escape 方法。
说明:
escape(Str
对 0-255 以外的 unicode 值进行编码时输出 %u**** 格式,其它情况下 escape , encodeURI , encodeURIC
例:
var url = “<a href=’http
乱码处理实例:
//////////
例子跟上面一样。只有
(hello.jsp
post = escape(pos
post = escape (post);//
(act.jsp)
String h = (String) e.nextElem
String v = request.ge
String mm = EscapeUnes
System.out
//////////
(EscapeUnes
//////////
package cn.kgnews.
public class EscapeUnes
public static String escape(Str
int i;
char j;
StringBuff
tmp.ensure
for (i = 0; i < src.length
j = src.charAt
if (Character
|| Character.
tmp.append
else if (j < 256) {
tmp.append
if (j < 16)
tmp.append
tmp.append
} else {
tmp.append
tmp.append
}
}
return tmp.toStri
}
public static String unescape(S
StringBuff
tmp.ensure
int lastPos = 0 , pos = 0;
char ch;
while (lastPos < src.length
pos = src.indexO
if (pos == lastPos) {
if (src.charA
ch = (char) Integer.pa
.substring
tmp.append
lastPos = pos + 6;
} else {
ch = (char) Integer.pa
.substring
tmp.append
lastPos = pos + 3;
}
} else {
if (pos == -1) {
tmp.append
lastPos = src.length
} else {
tmp.append
lastPos = pos;
}
}
}
return tmp.toStri
}
}
//////////
说明:
EscapeUnes
原理跟上例一样。
3. 用 JavaScript 实现 java 中的 URLencode 跟 URLdecode.
说明:
这种方法服务器端代码
JavaScript 中的 URLencode 跟 URLdecode 实现如下:
//////////
(UrlEncode
完整代码可到这里下载
http://www
//////////
var qswhU2GB = […..]; // 此数组为 GB Unicode 对照表
function UrlEncode(
var i , c , ret="" , strSpecial
for(i=0;i<
if(str.cha
c=qswhU2GB
ret+="%"+c
}
else{
c=str.char
if(c==" ")
ret+="+";
else if(strSpec
ret+="%"+s
else
ret+=c;
}
}
return ret;
}
function UrlDecode(
var i , c , d , t , p , ret = "";
function findPos(st
for(var j = 0; j < qswhU2GB.l
if(qswhU2G
return j;
}
}
return -1;
}
for(i = 0;i < str.length
c = str.charAt
if(c != "%"){
if(c == "+"){
ret += " ";
}else{
ret += c;
}
}else{
t = str.substr
if(("0x" + t) > 0xA0){
d = str.substr
p = findPos(t + d);
if(p != -1){
ret += String.fro
}
}else{
ret += String.fro
}
}
}
return ret;
}
function getSpell(s
var i , c , t , ret="";
if(sp==nul
for(i=0;i<
if(str.cha
c=parseInt
if(c<55290
for(t=qswh
if(t>0)ret
}
}
}
return ret.substr
}
//////////
(UrlEncode
//////////
function UrlEncode(
var ret = "";
var strSpecial
for (var i = 0; i < str.length
var chr = str.charAt
strstr = chr;
execScript
if (parseInt(
ret += "%" + c.slice(0 , 2) + "%" + c.slice(-2
} else {
if (strSpecia
ret += "%" + c.toString
} else {
ret += chr;
}
}
}
return ret;
}
function UrlDecode(
var ret = "";
for (var i = 0; i < str.length
var chr = str.charAt
if (chr == "+") {
ret += " ";
} else {
if (chr == "%") {
var asc = str.substr
if (parseInt(
temp = parseInt("
execScript
ret += rt;
i += 5;
} else {
temp = parseInt("
execScript
i += 2;
}
} else {
ret += chr;
}
}
}
return ret;
}
//////////
(loadcssor
实现方法如下:
//////////
/*
CopyRight(
Created by CAnca.2007
*/
function LoadScript
document.w
}
function LoadCss(ur
document.w
}
var sSuffix = /msie/.tes
LoadScript
使用方法:
将三个 JS 文件放在同目录。在页
例:
//index.ht
<html>
<head>
<script language=”
<script language=”
var url = “ http://can
window.ope
</script>
</head>
<body>
…..
</body>
</html>
三种解决方案的比较:
第一种, 在服务器端需要一次 java.net.U
第二种, 要建立 Java 版的 escape 跟 uncape 。在服务器端还是需要
第三种, 是最方便的一种方法。
总结:
当然, Ajax 实现不乱码,可以不用
1. xmlhttp 返回的数据默认的字符
2. post 方法提交数据默认的字
解决方法:
推荐方法:由于 Javascript 沿用 java 的字符处理方式,内部
前台更改为
<meta http-equiv
后台 asp 中第一行加入如下代码
span