用JavaScript实现PHP的urlencode与urldecode函数

作者:demon 时间:2023-11-23 08:18:14 

很多朋友说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进行解析即可。

标签:urlencode,urldecode
0
投稿

猜你喜欢

  • django2+uwsgi+nginx上线部署到服务器Ubuntu16.04

    2022-01-15 17:03:09
  • 使用python实现baidu hi自动登录的代码

    2021-11-23 14:54:32
  • Python黑魔法@property装饰器的使用技巧解析

    2023-03-10 16:54:01
  • python处理DICOM并计算三维模型体积

    2022-07-16 09:24:29
  • vue3中使用Apache ECharts的详细方法

    2024-04-26 17:41:01
  • IE7 与 IE6 的模式窗口尺寸差异

    2008-03-06 13:49:00
  • php字符串函数学习之strstr()

    2024-05-11 10:02:07
  • 15行Python代码实现免费发送手机短信推送消息功能

    2023-11-01 10:20:51
  • 利用php+mcDropdown实现文件路径可在下拉框选择

    2023-09-11 15:18:02
  • Python实现针对json中某个关键字段进行排序操作示例

    2023-03-28 16:02:37
  • Django学习笔记之为Model添加Action

    2021-04-09 16:32:26
  • pandas读取csv文件,分隔符参数sep的实例

    2021-05-03 11:38:58
  • Python之string编码问题

    2021-08-28 15:25:48
  • python抓取网页中链接的静态图片

    2023-04-17 04:27:27
  • 关于keras中的Reshape用法

    2021-11-08 00:04:12
  • 玩客云折腾记录之编译 ArmBian 系统

    2022-03-07 15:28:52
  • 利用python Pandas实现批量拆分Excel与合并Excel

    2023-07-02 19:08:23
  • FrontPage2002简明教程七:HTML在FrontPage中的应用

    2008-09-17 11:33:00
  • MySQL实例crash的案例详细分析

    2024-01-12 13:22:27
  • Python学习之str重要函数

    2022-12-29 05:46:37
  • asp之家 网络编程 m.aspxhome.com