關(guān)于JAVASCRIPT urldecode URL解碼的問題
更新時間:2012年01月08日 22:40:46 作者:
JS要實(shí)現(xiàn)單純的編碼解碼輕而易舉,escape、unescape就搞定,但是遇到不是完整的URL轉(zhuǎn)碼,就沒辦法了
這個時候,出現(xiàn)了encodeURIComponent、decodeURIComponent,它可以完全的對URL進(jìn)行編碼解碼,但是遇到例如搜索引擎用到的部分轉(zhuǎn)碼,又摸不到門了,沒問題,PHP官方出了一個解決方案:
decodeURIComponent((str + '').replace(/\+/g, '%20'));
他可以完美的對搜索引擎的地址進(jìn)行解碼,因?yàn)樗阉饕嬷涣?xí)慣對”空格“進(jìn)行轉(zhuǎn)碼。忘了說還習(xí)慣對中文進(jìn)行轉(zhuǎn)碼。。。
那以上所有的方案遇到中文就崩潰了,是的,我也崩潰了,即是部分編碼,又是中文。。這讓我情何以堪。。。
查了很久可以,不多說你懂的。。。
<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">
/*這里開始時UrlEncode和UrlDecode<a href="/?tag=%E5%87%BD%E6%95%B0" target="_blank">函數(shù)</a>*/
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>
這個呢對僅對支持VB的瀏覽器支持。。。例如FF就不支持了。。。
為什么要用到VB呢?因?yàn)閟tr2asc、asc2str這種方法是JS不能滿足的。。。下面我模擬了兩個JS方法,貌似不是對所有中文有效。。
function str2asc(str){
return str.charCodeAt(0).toString(16);
}
function asc2str(str){
return String.fromCharCode(str);
}
復(fù)制代碼 代碼如下:
decodeURIComponent((str + '').replace(/\+/g, '%20'));
他可以完美的對搜索引擎的地址進(jìn)行解碼,因?yàn)樗阉饕嬷涣?xí)慣對”空格“進(jìn)行轉(zhuǎn)碼。忘了說還習(xí)慣對中文進(jìn)行轉(zhuǎn)碼。。。
那以上所有的方案遇到中文就崩潰了,是的,我也崩潰了,即是部分編碼,又是中文。。這讓我情何以堪。。。
查了很久可以,不多說你懂的。。。
復(fù)制代碼 代碼如下:
<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">
/*這里開始時UrlEncode和UrlDecode<a href="/?tag=%E5%87%BD%E6%95%B0" target="_blank">函數(shù)</a>*/
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>
這個呢對僅對支持VB的瀏覽器支持。。。例如FF就不支持了。。。
為什么要用到VB呢?因?yàn)閟tr2asc、asc2str這種方法是JS不能滿足的。。。下面我模擬了兩個JS方法,貌似不是對所有中文有效。。
復(fù)制代碼 代碼如下:
function str2asc(str){
return str.charCodeAt(0).toString(16);
}
function asc2str(str){
return String.fromCharCode(str);
}
您可能感興趣的文章:
- js編碼之encodeURIComponent使用介紹(asp,php)
- JavaScript.Encode手動解碼技巧
- Javascript下的urlencode編碼解碼方法附decodeURIComponent
- javascript encodeURI和encodeURIComponent的比較
- javascript 字符 Escape,encodeURI,encodeURIComponent
- javascript htmlencode函數(shù)(ff兼容版) 主要是編輯器中反轉(zhuǎn)html代碼
- javascript HTMLEncode HTMLDecode的完整實(shí)例(兼容ie和火狐)
- escape、encodeURI 和 encodeURIComponent 的區(qū)別
- 用JavaScript實(shí)現(xiàn)UrlEncode和UrlDecode的腳本代碼
- js將網(wǎng)址轉(zhuǎn)為urlencode類型
- encode腳本和normal腳本混用的問題與解決方法
- Javascript UrlDecode函數(shù)代碼
- js中encode、decode的應(yīng)用說明
相關(guān)文章
Webpack4+Babel7+ES6兼容IE8的實(shí)現(xiàn)
這篇文章主要介紹了Webpack4+Babel7+ES6兼容IE8的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04利用hasOwnProperty給數(shù)組去重的面試題分享
obj.hasOwnProperty(attr) 判斷是否是原型中的屬性,false就是原型中的屬性,下面這篇文章主要給大家介紹了一道利用hasOwnProperty給數(shù)組去重的面試題,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-11-11JavaScript中解決多瀏覽器兼容性23個問題的快速解決方法
下面小編就為大家?guī)硪黄狫avaScript中解決多瀏覽器兼容性23個問題的快速解決方法。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-05-05JS按位非(~)運(yùn)算符與~~運(yùn)算符的理解分析
按位非運(yùn)算符,簡單的理解就是改變運(yùn)算數(shù)的符號并減去1,當(dāng)然,這是只是簡單的理解能轉(zhuǎn)換成number類型的數(shù)據(jù)2011-07-07簡單介紹JavaScript數(shù)據(jù)類型之隱式類型轉(zhuǎn)換
這篇文章主要介紹了簡單介紹JavaScript數(shù)據(jù)類型之隱式類型轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下2015-12-12Three.js中實(shí)現(xiàn)Bloom效果及完整示例
這篇文章主要為大家介紹了Three.js中實(shí)現(xiàn)Bloom效果及完整示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04