技术的世界只说技术就好了..

分类目录

近期文章

标签

近期评论

功能

2018年八月
« 11月    
 12345
6789101112
13141516171819
20212223242526
2728293031  

js UrlEncode和UrlDecode函数

XML/HTML代码
        

  1. <script language="javascript">    
  2.     

  3. function UrlEncode(str)   
  4.     

  5. {    
  6.     

  7.     var ret="";    
  8.     

  9.     var strSpecial="!\"#$%&()*+,/:;<=>?[]^`{|}~%"; var tt="";   
  10.     

  11.     for(var i=0;i<str.length;i++)   
  12.     

  13.     {    
  14.     

  15.         var chr = str.charAt(i);    
  16.     

  17.         var c=str2asc(chr);    
  18.     

  19.         tt += chr+":"+c+"n";    
  20.     

  21.         if(parseInt("0x"+c) > 0x7f)   
  22.     

  23.         {    
  24.     

  25.             ret+="%"+c.slice(0,2)+"%"+c.slice(-2);    
  26.     

  27.         }   
  28.     

  29.         else   
  30.     

  31.         {    
  32.     

  33.             if(chr==" ")    
  34.     

  35.                 ret+="+";    
  36.     

  37.             else if(strSpecial.indexOf(chr)!=-1)    
  38.     

  39.                 ret+="%"+c.toString(16);    
  40.     

  41.             else    
  42.     

  43.                 ret+=chr;    
  44.     

  45.         }    
  46.     

  47.     }    
  48.     

  49.     return ret;    
  50.     

  51. }    
  52.     

  53.   
  54.     

  55. function UrlDecode(str){    
  56.     

  57.     var ret="";    
  58.     

  59.     for(var i=0;i<str.length;i++)   
  60.     

  61.     {    
  62.     

  63.         var chr = str.charAt(i);    
  64.     

  65.         if(chr == "+")   
  66.     

  67.         {    
  68.     

  69.             ret+=" ";    
  70.     

  71.         }   
  72.     

  73.         else if(chr=="%")   
  74.     

  75.         {    
  76.     

  77.             var asc = str.substring(i+1,i+3);    
  78.     

  79.             if(parseInt("0x"+asc)>0x7f)   
  80.     

  81.             {    
  82.     

  83.                 ret+=asc2str(parseInt("0x"+asc+str.substring(i+4,i+6)));    
  84.     

  85.                 i+=5;    
  86.     

  87.             }   
  88.     

  89.             else   
  90.     

  91.             {    
  92.     

  93.                 ret+=asc2str(parseInt("0x"+asc));    
  94.     

  95.                 i+=2;    
  96.     

  97.             }    
  98.     

  99.         }   
  100.     

  101.         else   
  102.     

  103.         {    
  104.     

  105.             ret+= chr;    
  106.     

  107.         }    
  108.     

  109.     }    
  110.     

  111.     return ret;    
  112.     

  113. }    
  114.     

  115. </script>  

 

使用php获得可靠的精准的当前时间通过授时服务器

有一种情形是这样子的,比如机票业务中的订票流程,我们需要一个非常可靠的当前时间来支持,尽管大多数服务器的时间是非常准确的,我们使用time()来获取的时间是可靠的,但未免会有不确切的情况,也有的服务器由于未开启ntp(Network Time Protocol)来进行时间同步,再由于硬件环境等因素,导致时间五花八门,这在通常,也就差个几分钟、最多几个小时的情况是无可厚非的,因为在同一个网站使用的是同一个时间,可是有的时候这样很糟糕。在internet上,有免费专门提供UTC时间校正的授时服务器,使用NTP协议,这个可以参考前面的链接来获取更多知识。他提供的时间误差在20ms左右(不要说在数据传输过程中会耗费的时间不等,NTP早就考虑到了这一点),因此通过这种授时服务器,我们就能得非常可信的当前时间。

 

比如我的电脑中安装的这个原子时钟,它就具有自动同步时间的功能,因此,我的电脑时间是很可信的。实际上,windows和linux等系统都支持通过NTP协议自动同步时间。

atomic-clock

我们现在就来看看用PHP怎么获取到非常精准的UTC时间,由于NTP协议稍微有一点点的不好用,我们有一个更好的协议可以用,他就是Daytime Protocol协议,通过这个协议我们可以直接得到文本数据,这样处理起来会更加方便。我们使用time.nist.gov的时间服务,代码非常简单,用TCP连接它的13端口就可以了。

$fp=fsockopen('time.nist.gov',13,$errno,$errstr,90);echo fread($fp,2096);

获得到的数据类似于这样的:

54979 09-05-28 09:10:50 50 0 0 206.9 UTC(NIST) *

这个串的每个部分都有意义,具体的请参看:http://tf.nist.gov/service/its.htm,现在我们只关心中间的部分和206.9前面的那个0,它表示服务器的健康状况,也反映当前的时间是否可信。

OK了,用PHP实现获得准确的UTC时间,这个应用在对时间要求非常苛刻的场合还是很有价值的,到此,我的问题也算解决了。今天端午节,祝大家节日快乐!

 

© 2018 技术控 All Rights Reserved