js URLdecode()与urlencode方法支持中文解码

 更新时间:2016年9月20日 18:58  点击:7875
下面来介绍在js中来利用urlencode对中文编码与接受到数据后利用URLdecode()对编码进行解码,有需要学习的机友可参考参考。
 代码如下 复制代码


<script language="vbscript">
Function str2asc(strstr)
str2asc = hex(asc(strstr))
End Function
Function asc2str(ascasc)
asc2str = chr(ascasc)
End Function
</script>
<script language="javascript" type="text/javascript">
function UrlEncode(str){
   var ret="";
   var strSpecial="!"#$%&'()*+,/:;<=>?[]^`{|}~%";
   for(var i=0;i<str.length;i++){
   var chr = str.charAt(i);
     var c=str2asc(chr);
     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;
}
</script>

用这样的办法调用:

 代码如下 复制代码

<script language="javascript" type="text/javascript">
alert(UrlEncode("孙毓波大好人"));
</script>


解码办法

 代码如下 复制代码

function UrlDecode(zipStr){ 
    var uzipStr=""; 
    for(var i=0;i<zipStr.length;i++){ 
        var chr = zipStr.charAt(i); 
        if(chr == "+"){ 
            uzipStr+=" "; 
        }else if(chr=="%"){ 
            var asc = zipStr.substring(i+1,i+3); 
            if(parseInt("0x"+asc)>0x7f){ 
                uzipStr+=decodeURI("%"+asc.toString()+zipStr.substring(i+3,i+9).toString()); 
                i+=8; 
            }else{ 
                uzipStr+=AsciiToString(parseInt("0x"+asc)); 
                i+=2; 
            } 
        }else{ 
            uzipStr+= chr; 
        } 
    } 
 
    return uzipStr; 

 
function StringToAscii(str){ 
    return str.charCodeAt(0).toString(16); 

function AsciiToString(asccode){ 
    return String.fromCharCode(asccode); 
}

用法

使用方法

 代码如下 复制代码

var str = '%e7%90%bc%e5%8f%b0%e5%8d%9a%e5%ae%a2';
var destr = UrlDecode(str);
alert(destr);

javascript中弹出< /script>标记出错解决方法,有碰到这样问题的机友可参考参考。

在JS里弹出‘’会让JS误以为这是一个结束标签,而出现异常。

如以下代码

我们在 ’字符串,结果被误以为是结束标签,VIM还变了颜色。运行结果

JS

由于把字符串里的当成了结束标签,所以就出现异常,显然这不是我们想要的结果。我们只需要把代码稍加处理一下即可实现。

在‘’里使用加号链接字符串,再来看下运行结果

程序正常,正确弹出字符串'',在JS中如果字符串使用加号等于连接,数字使用加号等于相加

在js中没有像php中strtotime()与date()函数,可直接转换时间戳,下面我们来自定一个函数来实现js中具体有时间戳转换的功能。
 代码如下 复制代码

function datetime_to_unix(datetime){
    var tmp_datetime = datetime.replace(/:/g,'-');
    tmp_datetime = tmp_datetime.replace(/ /g,'-');
    var arr = tmp_datetime.split("-");
    var now = new Date(Date.UTC(arr[0],arr[1]-1,arr[2],arr[3]-8,arr[4],arr[5]));
    return parseInt(now.getTime()/1000);
}
 
function unix_to_datetime(unix) {
    var now = new Date(parseInt(unix) * 1000);
    return now.toLocaleString().replace(/年|月/g, "-").replace(/日/g, " ");
}
 
var datetime = '2012-11-16 10:36:50';
var unix = datetime_to_unix(datetime);
document.write(datetime+' 转换后的时间戳为: '+unix+'
');
 
var unix = 1353033300;
var datetime = unix_to_datetime(unix);
document.write(unix+' 转换后的日期为: '+datetime);

如果想弹出:2010-10-20 10:00:00这个格式的也好办

 代码如下 复制代码

<script>
function getLocalTime(nS) {
    return new Date(parseInt(nS) * 1000).toLocaleString().replace(/年|月/g, "-").replace(/日/g, " ");
}
alert(getLocalTime(1177824835));
</script>

完整实例

 代码如下 复制代码

<script type="text/javascript">
var day1 = parseInt(new Date().valueOf()/1000);
var day2 = new Date(day1 * 1000);

function getLocalTime(nS) { 
    return new Date(parseInt(nS) * 1000).toLocaleString().replace(/:d{1,2}$/,' '); 
}

/* 同上面函数 */
function getLocalTimes(nS) { 
    return new Date(parseInt(nS) * 1000).toLocaleString().substr(0,17);

function getLocalFormatTime(nS) { 
 return new Date(parseInt(nS) * 1000).toLocaleString().replace(/年|月/g, "-").replace(/日/g, " ");  
}
   
document.getElementById("btn1").onclick = function(){
 alert(day1);
}

document.getElementById("btn2").onclick = function(){
 alert(day2.toLocaleString());
}

document.getElementById("btn3").onclick = function(){
 alert( getLocalTime(day1) );
}

document.getElementById("btn4").onclick = function(){
 alert( getLocalFormatTime(day1) );
}

document.getElementById("btn5").onclick = function(){
 alert(day2.getFullYear()+"-"+(day2.getMonth()+1)+"-"+day2.getDate()+" "+day2.getHours()+":"+day2.getMinutes()+":"+day2.getSeconds());
}
</script>

 

获取农历

农历月的天数是一个变数,有时是 29 天,有时是 30 天。

农历每月的第一天是月亮全黑的日子。

农历年由 24 个节气来确定,节气则由太阳的角度来确定。农历的第一个节气叫 雨水,定在太阳的角度为 330 度的日子。其余的 23 个节气分别定在太阳的角度 每变化 15 度的日子。下面的表格列出了 24 个节气的名称和定义:

命称    角度    公历日期      周期

立春     315     2月 4日

雨水     330     2月19日    29.8天

惊蛰     345     3月 6日

春分       0     3月21日    30.2天

清明      15     4月 5日

谷雨      30     4月20日    30.7天

立夏      45     5月 6日

夏满      60     5月21日    31.2天

芒种      75     6月 6日

夏至      90     6月22日    31.4天

小暑     105     7月 7日

大暑     120     7月23日    31.4天

立秋     135     8月 8日

处暑     150     8月23日    31.1天

白露     165     9月 8日

秋分     180     9月23日    30.7天

寒露     195    10月 8日

霜降     210    10月24日    30.1天

立冬     225    11月 8日

小雪     240    11月22日    29.7天

大雪     255    12月 7日

冬至     270    12月22日    29.5天

小寒     285     1月 6日

大寒     300     1月20日    29.5天

24 个节气中有 12 个是主节气:雨水,春分,谷雨,夏满,夏至,大暑,处暑, 秋分,霜降,小雪,冬至,大寒。

农历年跟天文年相差较大。农历常年有十二个农历月,有 353,354,或者 355 天,比天文年少大约 11 天。为了跟天文年同步,每隔三个农历常年左右,必需设 一闰年。闰年有十三个月,添加的这个月叫闰月。

农历十二个月的名称分别为:正月,二月,三月,四月,五月,六月,七月,八 月,九月,十月,冬月,腊月。

农历闰年闰月的确定比较难,闰月农历算法有两条:

•一:冬至必须落在农历冬月。如果落不上,腊月之前就要添上一个月,成为闰 年。
•二:如果是闰年,冬月后边第一个不含主节气的月份定为闰月。闰月使用前一 月份的名称。
农历年以 60 年为一周期,每年的名称由 10 个天干的一个字和 12 个地支的一 个字排列而成。

10 天干为:

•甲,乙,丙,丁,戊,己,庚,辛,壬,癸。
12 地支 为:

•子,丑,寅,卯,辰,巳,午,未,申,酉,戌,亥。
•12 地支有 12 动物生肖 与其对应:
鼠,牛,虎,兔,龙,蛇,马,羊,猴,鸡,狗,猪。
跟据历史记载,农历年已经经过了 78 个周期。今年,公历2010 年,是第 79 个周期的第 28 年,也就是农历第 4707 年

 代码如下 复制代码

<script type="text/javascript">
<!-- 
var now=new Date(); 
// -->
</script>     
<script language=javascript>
<!-- 
var lunarinfo=new Array(0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2,     
0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977,     
0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970,     
0x06566,0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950,     
0x0d4a0,0x1d8a6,0x0b550,0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,     
0x06ca0,0x0b550,0x15355,0x04da0,0x0a5d0,0x14573,0x052d0,0x0a9a8,0x0e950,0x06aa0,     
0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950,0x05b57,0x056a0,     
0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b5a0,0x195a6,     
0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570,     
0x04af5,0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0,     
0x0c960,0x0d954,0x0d4a0,0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5,     
0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a930,     
0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260,0x0ea65,0x0d530,     
0x05aa0,0x076a3,0x096d0,0x04bd7,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45,     
0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0);     
   
//==== 传回农历 y年的总天数     
function lyeardays(y) {     
var i, sum = 348     
for(i=0x8000; i>0x8; i>>=1) sum += (lunarinfo[y-1900] & i)? 1: 0     
return(sum+leapdays(y))     
}     
//==== 传回农历 y年闰月的天数     
function leapdays(y) {     
if(leapmonth(y))  return((lunarinfo[y-1900] & 0x10000)? 30: 29)     
else return(0)     
}     
//==== 传回农历 y年闰哪个月 1-12 , 没闰传回 0     
function leapmonth(y) { return(lunarinfo[y-1900] & 0xf)}     
//====================================== 传回农历 y年m月的总天数     
function monthdays(y,m) { return( (lunarinfo[y-1900] & (0x10000>>m))? 30: 29 )}     
//==== 算出农历, 传入日期物件, 传回农历日期物件     
//     该物件属性有 .year .month .day .isleap .yearcyl .daycyl .moncyl     
function lunar(objdate) {     
var i, leap=0, temp=0;     
var basedate = new Date(1900,0,31);     
var offset   = (objdate - basedate)/86400000;     
this.daycyl = offset + 40;     
this.moncyl = 14;     
for(i=1900; i<2050 && offset>0; i++) {     
temp = lyeardays(i);     
offset -= temp;     
this.moncyl += 12;     
}     
if(offset<0) {     
offset += temp;     
i--;     
this.moncyl -= 12;     
}     
this.year = i;     
this.yearcyl = i-1864;     
leap = leapmonth(i); //闰哪个月     
this.isleap = false    
for(i=1; i<13 && offset>0; i++) {     
//闰月     
if(leap>0 && i==(leap+1) && this.isleap==false)     
{ --i; this.isleap = true; temp = leapdays(this.year); }     
else    
{ temp = monthdays(this.year, i); }     
//解除闰月     
if(this.isleap==true && i==(leap+1)) this.isleap = false    
offset -= temp     
if(this.isleap == false) this.moncyl ++     
}     
if(offset==0 && leap>0 && i==leap+1)     
if(this.isleap)     
{ this.isleap = false; }     
else    
{ this.isleap = true; --i; --this.moncyl;}     
if(offset<0){ offset += temp; --i; --this.moncyl; }     
this.month = i     
this.day = offset + 1     
}     
function cday(m,d){     
var nstr1 = new Array('日','一','二','三','四','五','六','七','八','九','十');     
var nstr2 = new Array('初','十','廿','卅',' ');     
var s;     
if (m>10){s = '十'+nstr1[m-10]} else {s = nstr1[m]} s += '月'    
if (s=="十二月") s = "腊月";     
if (s=="一月") s = "正月";     
switch (d) {     
case 10:s += '初十'; break;     
case 20:s += '二十'; break;     
case 30:s += '三十'; break;     
default:s += nstr2[Math.floor(d/10)]; s += nstr1[d%10];     
}     
return(s);     
}     
function solarday2(){     
var sdobj = new Date(now.getFullYear(),now.getMonth(),now.getDate());     
var ldobj = new lunar(sdobj);     
var cl = '';      
//农历bb'+(cld[d].isleap?'闰 ':' ')+cld[d].lmonth+' 月 '+cld[d].lday+' 日     
var tt = cday(ldobj.month,ldobj.day);     
document.write(now.getFullYear()+"年"+(now.getMonth()+1)+"月"+now.getDate()+"日 农历"+tt+"");     
}     
solarday2();     
// -->
</script>

如果要在js中来判断自身是否是顶级窗口我们可直接利用top.location!=self.location来加以操作,具体看下面代码

顶级窗口的地址:top.location

本窗口的地址:self.location

 代码如下 复制代码

if(top.location!=self.location){
top.location = self.location;
}

具体实现程序

 代码如下 复制代码

if (window.top !== window.self) { // are you trying to put self in an iframe?
  try {
    if (window.top.location.host) { // this is illegal to access unless you share a non-spoofable document domain
      // fun times
    } else {
      bust(); // chrome executes this
    }
  } catch (ex) {
    bust(); // everyone executes this
  }
}

[!--infotagslink--]

相关文章

  • js URLdecode()与urlencode方法支持中文解码

    下面来介绍在js中来利用urlencode对中文编码与接受到数据后利用URLdecode()对编码进行解码,有需要学习的机友可参考参考。 代码如下 复制代码 ...2016-09-20
  • php中json_decode()和json_encode()用法与中文不显示解决办法

    本文章介绍了关于php中json_decode()和json_encode()用法与中文不显示解决办法,有需要的朋友可以参考一下下。 php中json_decode()和json_encode() 1.json_decode(...2016-11-25
  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • ps把文字背景变透明的操作方法

    ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
  • intellij idea快速查看当前类中的所有方法(推荐)

    这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02
  • Mysql select语句设置默认值的方法

    1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
  • js导出table数据到excel即导出为EXCEL文档的方法

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13
  • mysql 批量更新与批量更新多条记录的不同值实现方法

    批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
  • js基础知识(公有方法、私有方法、特权方法)

    本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
  • ps怎么制作倒影 ps设计倒影的方法

    ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果&#819...2017-07-06
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • c#中分割字符串的几种方法

    单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • js控制页面控件隐藏显示的两种方法介绍

    javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visi...2013-10-13
  • 连接MySql速度慢的解决方法(skip-name-resolve)

    最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21
  • C#方法的总结详解

    本篇文章是对C#方法进行了详细的总结与介绍,需要的朋友参考下...2020-06-25