php实现encode64编码类实例
本文实例讲述了php实现encode64编码类。分享给大家供大家参考。具体如下:
encode64可以获得最短的由26个英文大小写字母数字加上"-_"两个符号编码的数据,这个个字串可以在网络自由传输,无需考虑被自动转码引起的混乱.缺点:对于大字串太慢了,原因不明,可能PHP脚本本身就是慢,所以它内置很多函数,这些函数如果用脚本来实现是不可忍受的.而JavaScript就没这个问题,脚本的速度快的多.
<?PHP //encode64编码可以同时取代encodeURI,encodeURIComponent,endode函数 //因为选取的这些字符都不会被编码. classEncode64{ functioncode($str){ $KEY='PaAwO65goUf7IK2vi9-xq8cFTEXLCDY1Hd3tV0ryzjbpN_BlnSs4mGRkQWMZJeuh'; $a=StrToBytes($str); $len=count($a); $res=$len%3; $s="";$i=2;$v=0; for(;$i<$len;$i+=3){ $v=$a[$i-2]+($a[$i-1]<<8)+($a[$i]<<16); $s.=$KEY[$v&0x3f]; $s.=$KEY[($v>>6)&0x3f]; $s.=$KEY[($v>>12)&0x3f]; $s.=$KEY[($v>>18)]; } if($res==1){ $v=$a[$i-2]; $s.=$KEY[$v&0x3f]; $s.=$KEY[($v>>6)&0x3f]; }elseif($res==2){ $v=$a[$i-2]+($a[$i-1]<<8); $s.=$KEY[$v&0x3f]; $s.=$KEY[($v>>6)&0x3f]; $s.=$KEY[($v>>12)&0x3f]; } return$s; } functiondecode($codeStr){ $KEY='PaAwO65goUf7IK2vi9-xq8cFTEXLCDY1Hd3tV0ryzjbpN_BlnSs4mGRkQWMZJeuh'; $dic=array(); for($i=0;$i<64;$i++){ $dic[$KEY[$i]]=$i; } $len=strlen($codeStr); $res=$len%4; $cLen=floor($len/4)*3; if($res==2)$clen+=1; elseif($res==3)$clen+=2; $code=range(0,$clen); $i=3;$v=0;$j=0; for(;$i<$len;$i+=4){ $v=$dic[$codeStr[$i-3]]; $v+=$dic[$codeStr[$i-2]]<<6; $v+=$dic[$codeStr[$i-1]]<<12; $v+=$dic[$codeStr[$i]]<<18; $code[$j]=$v&0xff; $code[$j+1]=($v>>8)&0xff; $code[$j+2]=($v>>16)&0xff; $j+=3; } if($res==2){ //正确的字节数肯定是余2或3,没有1的情况,如果出现,舍弃. $v=$dic[$codeStr[$i-3]]; $v+=$dic[$codeStr[$i-2]]<<6; $code[$j]=$v&0xff; }elseif($res==3){ $v=$dic[$codeStr[$i-3]]; $v+=$dic[$codeStr[$i-2]]<<6; $v+=$dic[$codeStr[$i-1]]<<12; $code[$j]=$v&0xff; $code[$j+1]=($v>>8)&0xff; } returnBytesToStr($code); } } functionBytesToStr($bytes){ $str=''; foreach($bytesas$ch){ $str.=chr($ch); } returniconv('UTF-16BE','utf-8',$str); } functionStrToBytes($str){ $str=iconv('utf-8','UTF-16BE',$str); $len=strlen($str); $bytes=array(); for($i=0;$i<$len;$i++){ $bytes[]=ord($str[$i]); } return$bytes; } ?>
希望本文所述对大家的php程序设计有所帮助。