Java编程script中存在几种对URL字符串停止编码的窍门:escape(),encodeURI(),以及encodeURIComponent()。这几种编码所起的功能各不相同。
采用ISO Latin字符集对指定的字符串停止编码。所有的空格符、标点符号、特殊字符以及更多有联系非ASCII字符都将被转化成%xx各式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。
把URI字符串采用UTF-8编码各式转化成escape各式的字符串。与encodeURI()相比,那个窍门将对更多的字符停止编码,比如 / 等字符。所以假如字符串里面包含了URI的几个部份的话,别用那个窍门来停止编码,否则 / 字符被编码之后URL将呈现错误。
因此,对于汉文字符串来说,假如不期望把字符串编码各式转化成UTF-8各式的(比如原页面和目的页面的charset是一致的时候),只需求应用 escape。假如你的页面是GB2312或者更多有联系的编码,而接受参数parameter的页面是UTF-8编码的,就要采用encodeURI或者encodeURIComponent。
JavaScript 中实现 ANSI(gb2312) 的 URL 编码与解码(URLEncode、URLDecode)
encodeURI 和 encodeURIComponent 是按 UTF-8 对 URL 编码的,下面的代码是按 ANSI 对 URL进行编码和解码的。使用了两个 vbscript 自定义函数,请参见 JavaScript 函数如何调用 VBScript 函数。
以下整理自 Moocky.Mark's Blog。
<script type="text/vbscript">
<!--
function str2asc(strstr)
str2asc = hex(asc(strstr))
end function
function asc2str(ascasc)
asc2str = chr(ascasc)
end function
'-->
</script>
<script type="text/javascript">
<!--
function urlEncode(str)
{
var ret = "";
var strSpecial = "!\"#$%&’()*+,/:;<=>?[]^`{|}~%";
var tt = "";
for(var i = 0; i < str.length; i++)
{
var chr = str.charAt(i);
var c = str2asc(chr);
tt += chr + ":" + c + "n";
if (parseInt("0x" + c) > 0x7f)
{
ret += "%" + c.slice(0,2) + "%" + c.slice(-2);
}
else
{
if (chr == " ")
ret += "+";
else if (strSpecial.indexOf(chr) != -1)
ret += "%" + c.toString(16);
else
ret += chr;
}
}
return ret;
}
function urlDecode(str)
{
var ret = "";
for (var i = 0; i < str.length; i++)
{
var chr = str.charAt(i);
if (chr == "+")
{
ret += " ";
}
else if (chr == "%")
{
var asc = str.substring(i+1, i+3);
if (parseInt("0x"+asc) > 0x7f)
{
ret += asc2str(parseInt("0x" + asc+str.substring(i+4, i+6)));
i += 5;
}
else
{
ret += asc2str(parseInt("0x"+asc));
i += 2;
}
}
else
{
ret += chr;
}
}
return ret;
}
-->
</script>
VBScript、VB.NET 中的 URLEncode、URLDecode
(本文的 URLEncode、URLDecode 是按 ANSI 编码的。千一网络编辑注)
VBScript 中的 URLEncode、URLDecode
Public
Function
URLEncode(strURL)
Dim
I
Dim
tempStr
For
I
=
1
To
Len
(strURL)
If
Asc
(
Mid
(strURL, I,
1
))
<
0
Then
tempStr
=
"
%
"
&
Right
(
CStr
(
Hex
(
Asc
(
Mid
(strURL, I,
1
)))),
2
)
tempStr
=
"
%
"
&
Left
(
CStr
(
Hex
(
Asc
(
Mid
(strURL, I,
1
)))),
Len
(
CStr
(
Hex
(
Asc
(
Mid
(strURL, I,
1
)))))
-
2
)
&
tempStr
URLEncode
=
URLEncode
&
tempStr
ElseIf
(
Asc
(
Mid
(strURL, I,
1
))
>=
65
And
Asc
(
Mid
(strURL, I,
1
))
<=
90
)
Or
(
Asc
(
Mid
(strURL, I,
1
))
>=
97
And
Asc
(
Mid
(strURL, I,
1
))
<=
122
)
Then
URLEncode
=
URLEncode
&
Mid
(strURL, I,
1
)
Else
URLEncode
=
URLEncode
&
"
%
"
&
Hex
(
Asc
(
Mid
(strURL, I,
1
)))
End
If
Next
End Function
Public
Function
URLDecode(strURL)
Dim
I
If
InStr
(strURL,
"
%
"
)
=
0
Then
URLDecode
=
strURL:
Exit
Function
For
I
=
1
To
Len
(strURL)
If
Mid
(strURL, I,
1
)
=
"
%
"
Then
If
eval
(
"
&H
"
&
Mid
(strURL, I
+
1
,
2
))
>
127
Then
URLDecode
=
URLDecode
&
Chr
(
eval
(
"
&H
"
&
Mid
(strURL, I
+
1
,
2
)
&
Mid
(strURL, I
+
4
,
2
)))
I
=
I
+
5
Else
URLDecode
=
URLDecode
&
Chr
(
eval
(
"
&H
"
&
Mid
(strURL, I
+
1
,
2
)))
I
=
I
+
2
End
If
Else
URLDecode
=
URLDecode
&
Mid
(strURL, I,
1
)
End
If
Next
End Function
Private Sub Command1_Click()Sub Command1_Click()
Text2.Text = URLEncode(Text1.Text)
End Sub
Public Function URLEncode()Function URLEncode(ByRef strURL As String) As String
Dim I As Long
Dim tempStr As String
For I = 1 To Len(strURL)
If Asc(Mid(strURL, I, 1)) < 0 Then
tempStr = "%" & Right(CStr(Hex(Asc(Mid(strURL, I, 1)))), 2)
tempStr = "%" & Left(CStr(Hex(Asc(Mid(strURL, I, 1)))), Len(CStr(Hex(Asc(Mid(strURL, I, 1))))) - 2) & tempStr
URLEncode = URLEncode & tempStr
ElseIf (Asc(Mid(strURL, I, 1)) >= 65 And Asc(Mid(strURL, I, 1)) <= 90) Or (Asc(Mid(strURL, I, 1)) >= 97 And Asc(Mid(strURL, I, 1)) <= 122) Then
URLEncode = URLEncode & Mid(strURL, I, 1)
Else
URLEncode = URLEncode & "%" & Hex(Asc(Mid(strURL, I, 1)))
End If
Next
End Function
Public Function URLDecode()Function URLDecode(ByRef strURL As String) As String
Dim I As Long
If InStr(strURL, "%") = 0 Then URLDecode = strURL: Exit Function
For I = 1 To Len(strURL)
If Mid(strURL, I, 1) = "%" Then
If Val("&H" & Mid(strURL, I + 1, 2)) > 127 Then
URLDecode = URLDecode & Chr(Val("&H" & Mid(strURL, I + 1, 2) & Mid(strURL, I + 4, 2)))
I = I + 5
Else
URLDecode = URLDecode & Chr(Val("&H" & Mid(strURL, I + 1, 2)))
I = I + 2
End If
Else
URLDecode = URLDecode & Mid(strURL, I, 1)
End If
Next
End Function
Private Sub Command2_Click()Sub Command2_Click()
Text3.Text = URLDecode(Text2.Text)
End Sub
Private Sub Form_Load()Sub Form_Load()
Text1.Text = "http://www.microsoft.com/中国微软"
End Sub
纯 JavaScript 版的 ANSI 的 URL 编码与解码
JavaScript 版本中可以通过 encodeURI, encodeURIComponent 实现 UTF-8 的 URL 编码与解码,但要实现 ANSI 的就得自己写代码了。
之前有一个 JavaScript 与 VBScript 混合的 ANSI 的 URL 编码与解码,遗憾的是某些浏览器无法支持 VBScript,所以才有了本文纯 JavaScript 版的。
Unicode 与 ANSI 的编码转换
ANSI 编码与字符之间的转换
function
str2asc(str)
{
var n
=
UnicodeToAnsi(str.charCodeAt(
0
));
var s
=
n.toString(
16
);
return s.toUpperCase();
}
function
asc2str(code)
{
var n
=
AnsiToUnicode(code);
return
String
.fromCharCode(n);
}
URL 编码与解码
function
urlEncode(str)
{
var ret
=
""
;
var strSpecial
=
"
!\
"
#$%
&
’()
*+
,
/
:;
<=>
?[]
^
`{|}~%
"
;
var tt
=
""
;
for
(var i
=
0
; i
<
str.length; i
++
)
{
var
chr
=
str.charAt(i);
var c
=
str2asc(
chr
);
tt
+=
chr
+
"
:
"
+
c
+
"
n
"
;
if
(parseInt(
"
0x
"
+
c)
>
0x7f)
{
ret
+=
"
%
"
+
c.slice(
0
,
2
)
+
"
%
"
+
c.slice(
-
2
);
}
else
{
if
(
chr
==
"
"
)
ret
+=
"
+
"
;
else
if
(strSpecial.indexOf(
chr
) !
=
-
1
)
ret
+=
"
%
"
+
c.toString(
16
);
else
ret
+=
chr
;
}
}
return ret;
}
function
urlDecode(str)
{
var ret
=
""
;
for
(var i
=
0
; i
<
str.length; i
++
)
{
var
chr
=
str.charAt(i);
if
(
chr
==
"
+
"
)
{
ret
+=
"
"
;
}
else
if
(
chr
==
"
%
"
)
{
var
asc
=
str.substring(i
+
1
, i
+
3
);
if
(parseInt(
"
0x
"
+
asc
)
>
0x7f)
{
ret
+=
asc2str(parseInt(
"
0x
"
+
asc
+
str.substring(i
+
4
, i
+
6
)));
i
+=
5
;
}
else
{
ret
+=
asc2str(parseInt(
"
0x
"
+
asc
));
i
+=
2
;
}
}
else
{
ret
+=
chr
;
}
}
return ret;
}
url 编码 js url传参中文乱码解决方案(教程)
前后台用js传参过程中,如果是中文就容易出现乱码,所以最好是先编码。 1.配置文件web.config中 在节中加上整个网站(的)编码方式。
<globalization fileEncoding="GB2312" requestEncoding="GB2312" responseEncoding="GB2312"/>
这样参数就以gb2312(的)中文编码方式传输了。而一般默认是utf-8.
2.在传参是先编码在传输,接受时先编码,在接收。
string mm=Server.URLEncode(你们);
Response.Redirect(index.aspx?mm=+mm);
然后在接收页解码:
string mm = Server.URLDecode(Requext.querystring(mm));
javascript中存在几种对URL字符串进行编码(的)方法:escape(),encodeURI(),以及encodeURIComponent()。这几种编码所起(的)作用各不相同。
escape() 方法:
采用ISO Latin字符集对指定(的)字符串进行编码。所有(的)空格符、标点符号、特殊字符以及其他们非ASCII字符都将被转化成%xx格式(的)字符编码(xx等于该字符在字符集表里面(的)编码(的)16进制数字)。比如,空格符对应(的)编码是%20。
不会被此方法编码(的)字符: @ * / +
encodeURI() 方法:
把URI字符串采用UTF-8编码格式转化成escape格式(的)字符串。
不会被此方法编码(的)字符:! @ # $& * ( ) = : / ; ? + '
encodeURIComponent() 方法:
把 URI字符串采用UTF-8编码格式转化成escape格式(的)字符串。与encodeURI()相比,这个方法将对更多(的)字符进行编码,比如 / 等字符。所以如果字符串里面包含了URI(的)几个部分(的)话,不能用这个方法来进行编码,否则 / 字符被编码之后URL将显示错误。
不会被此方法编码(的)字符:! * ( ) '
因 此,对于中文字符串来说,如果不希望把字符串编码格式转化成UTF-8格式(的)(比如原页面和目标页面(的)charset是一致(的)时候),只需要 使用 escape。如果你们(的)页面是GB2312或者其他们(的)编码,而接受参数(的)页面是UTF-8编码(的),就要采用encodeURI或者 encodeURIComponent。
另外,encodeURI/encodeURIComponent是在javascript1.5之后引进(的),escape则在javascript1.0版本就有。
传参:用encodeURI("url参数")将url编码
收参:用decodeURI("接收到(的)值")解码
js实现url加密,解密、
查看效果:js实现url加密,解密
<!--代码来自网络-->
<title>js实现asp中的UrlEncode和UrlDecode--来自网络</title>
<form action="" method="post" name="form">
<input type="text" size="50" name="code" maxlength="100" /><br />
<input type="submit" value="加密解密" />
</form>
<script language="vbscript">
Function str2asc(strstr)
str2asc = hex(asc(strstr))
End Function
Function asc2str(ascasc)
asc2str = chr(ascasc)
End Function
</script>
<script language="javascript">
/*这里开始时UrlEncode和UrlDecode函数*/
function UrlEncode(str){
var ret="";
var strSpecial="!\"#$%&'()*+,/:;<=>?[]^`{|}~%";
for(var i=0;i<str.length;i++){
var chr = str.charAt(i);
var c=str2asc(chr);
//tt+= chr+":"+c+"n";
if(parseInt("0x"+c) > 0x7f){
ret+="%"+c.slice(0,2)+"%"+c.slice(-2);
}else{
if(chr==" ")
ret+="+";
else if(strSpecial.indexOf(chr)!=-1)
ret+="%"+c.toString(16);
else
ret+=chr;
}
}
return ret;
}
function UrlDecode(str){
var ret="";
for(var i=0;i<str.length;i++){
var chr = str.charAt(i);
if(chr == "+"){
ret+=" ";
}else if(chr=="%"){
var asc = str.substring(i+1,i+3);
if(parseInt("0x"+asc)>0x7f){
ret+=asc2str(parseInt("0x"+asc+str.substring(i+4,i+6)));
i+=5;
}else{
ret+=asc2str(parseInt("0x"+asc));
i+=2;
}
}else{
ret+= chr;
}
}
return ret;
}
ss=""
aa=UrlEncode(ss)
bb=UrlDecode(ss)
document.write("编码后"+aa+"<br>");
document.write("解码后:"+bb);