下面的代码是跨浏览器,对地址栏中地址加密的js代码,运行到加密urlEncode中: if (parseInt("0x" + c) > 0x7f)
就出错了,或者从这里:else
ret += chr;就跳出了,
不知啥原因,请高手帮忙看看那里的问题?
前面的函数:UnicodeToAnsi,AnsiToUnicode另有定义在另一段代码中。<script language="javascript" type="text/javascript">
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);
}
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;
//alert(urlEncode(hellow));
}
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;
}
就出错了,或者从这里:else
ret += chr;就跳出了,
不知啥原因,请高手帮忙看看那里的问题?
前面的函数:UnicodeToAnsi,AnsiToUnicode另有定义在另一段代码中。<script language="javascript" type="text/javascript">
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);
}
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;
//alert(urlEncode(hellow));
}
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 language = "javascript"type = "text/javascript" >
//你的开始标签就是这样的吗?该有空格的地方不空,不该有空格的地方有空格?
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);
}
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;
//alert(urlEncode(hellow));
}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>