js 实现 php urlencode_用JavaScript实现PHP的urlencode与urldecode函数_javascript技巧

很多朋友说JavaScript的decodeURI函数也可以实现,但有bug所有呢,下面看下下面的函数,经过测试使用暂时没什么问题,我在之前的文章说过,这个和php的urldecode函数根本不是一回事。下面是我根据高人的代码改写的JavaScript版的urldecode函数,参考的链接在开头提到的文章中有,就不一一列举了。和之前的urlencode函数一样,只实现了utf-8版的。

1、urlencode

使用方法: urlencode(str);

function urlencode(clearString)

{

var output = '';

var x = 0;

clearString = utf16to8(clearString.toString());

var regex = /(^[a-zA-Z0-9-_.]*)/;

while (x < clearString.length)

{

var match = regex.exec(clearString.substr(x));

if (match != null && match.length > 1 && match[1] != '')

{

output += match[1];

x += match[1].length;

}

else

{

if (clearString[x] == ' ')

output += '+';

else

{

var charCode = clearString.charCodeAt(x);

var hexVal = charCode.toString(16);

output += '%' + ( hexVal.length < 2 ? '0' : '' ) + hexVal.toUpperCase();

}

x++;

}

}

function utf16to8(str)

{

var out, i, len, c;

out = "";

len = str.length;

for(i = 0; i < len; i++)

{

c = str.charCodeAt(i);

if ((c >= 0x0001) && (c <= 0x007F))

{

out += str.charAt(i);

}

else if (c > 0x07FF)

{

out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));

out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));

out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));

}

else

{

out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));

out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));

}

}

return out;

}

return output;

}

2、urldecode

使用方法:urldecode(url);

function urldecode(encodedString)

{

var output = encodedString;

var binVal, thisString;

var myregexp = /(%[^%]{2})/;

function utf8to16(str)

{

var out, i, len, c;

var char2, char3;

out = "";

len = str.length;

i = 0;

while(i < len)

{

c = str.charCodeAt(i++);

switch(c >> 4)

{

case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:

out += str.charAt(i-1);

break;

case 12: case 13:

char2 = str.charCodeAt(i++);

out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));

break;

case 14:

char2 = str.charCodeAt(i++);

char3 = str.charCodeAt(i++);

out += String.fromCharCode(((c & 0x0F) << 12) |

((char2 & 0x3F) << 6) |

((char3 & 0x3F) << 0));

break;

}

}

return out;

}

while((match = myregexp.exec(output)) != null

&& match.length > 1

&& match[1] != '')

{

binVal = parseInt(match[1].substr(1),16);

thisString = String.fromCharCode(binVal);

output = output.replace(match[1], thisString);

}

//output = utf8to16(output);

output = output.replace(/\\+/g, " ");

output = utf8to16(output);

return output;

}

当服务器端通过php的urlencode转码的就可以使用js的urldecode进行解析即可。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值