国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

用JavaScript實現(xiàn)PHP的urlencode與urldecode函數(shù)

2019-11-20 11:50:28
字體:
供稿:網(wǎng)友

很多朋友說JavaScript的decodeURI函數(shù)也可以實現(xiàn),但有bug所有呢,下面看下下面的函數(shù),經(jīng)過測試使用暫時沒什么問題,我在之前的文章說過,這個和php的urldecode函數(shù)根本不是一回事。下面是我根據(jù)高人的代碼改寫的JavaScript版的urldecode函數(shù),參考的鏈接在開頭提到的文章中有,就不一一列舉了。和之前的urlencode函數(shù)一樣,只實現(xiàn)了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;}

當服務(wù)器端通過php的urlencode轉(zhuǎn)碼的就可以使用js的urldecode進行解析即可。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 中山市| 河南省| 济阳县| 德令哈市| 潜江市| 宜宾县| 柘城县| 保定市| 会理县| 秦皇岛市| 澜沧| 安远县| 信阳市| 建阳市| 永善县| 桓仁| 都安| 河北区| 仪陇县| 保德县| 若羌县| 西昌市| 上思县| 始兴县| 辉南县| 唐山市| 宜宾县| 安岳县| 辽宁省| 马龙县| 汝阳县| 旬邑县| 静乐县| 乌海市| 奉化市| 翼城县| 卢氏县| 安仁县| 察哈| 陵川县| 北碚区|