php实现encode64编码类实例


Posted in PHP onMarch 24, 2015

本文实例讲述了php实现encode64编码类。分享给大家供大家参考。具体如下:

encode64可以获得最短的由26个英文大小写字母数字加上"-_"两个符号编码的数据, 这个个字串可以在网络自由传输, 无需考虑被自动转码引起的混乱. 缺点: 对于大字串太慢了, 原因不明, 可能PHP脚本本身就是慢, 所以它内置 很多函数, 这些函数如果用脚本来实现是不可忍受的. 而JavaScript就没这个问题, 脚本的速度快的多.

<?PHP
//encode64编码可以同时取代encodeURI,encodeURIComponent,endode函数
//因为选取的这些字符都不会被编码.
class Encode64{
 function code($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];
  } else if ($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;
 }
 function decode($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;
  } else if ($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;
  }
  return BytesToStr($code);
 }
}
function BytesToStr($bytes) {
 $str = '';
 foreach($bytes as $ch) {
  $str .= chr($ch);
 }
 return iconv('UTF-16BE','utf-8',$str);
}
function StrToBytes($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程序设计有所帮助。

PHP 相关文章推荐
discuz 首页四格:最新话题+最新回复+热门话题+精华文章插件
Aug 19 PHP
比较全面的PHP数组的使用方法小结
Sep 23 PHP
php 无法加载mcrypt.dll的解决办法
Apr 03 PHP
解析在PHP中使用mysqli扩展库对mysql的操作
Jul 03 PHP
PHP延迟静态绑定示例分享
Jun 22 PHP
php发送get、post请求的6种方法简明总结
Jul 08 PHP
基于PHP制作验证码
Oct 12 PHP
实例讲解YII2中多表关联的使用方法
Jul 21 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
PHP7.3.10编译安装教程
Oct 08 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
Oct 18 PHP
PHP实现rar解压读取扩展包小结
Jun 03 PHP
推荐十款免费 WordPress 插件
Mar 24 #PHP
php实现用于验证所有类型的信用卡类
Mar 24 #PHP
php动态生成版权所有信息的方法
Mar 24 #PHP
php实现通用的信用卡验证类
Mar 24 #PHP
php生成短域名函数
Mar 23 #PHP
PHP随机生成信用卡卡号的方法
Mar 23 #PHP
PHP实现通过Luhn算法校验信用卡卡号是否有效
Mar 23 #PHP
You might like
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
2016/02/26 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
PHP数据库操作三:redis用法分析
2017/08/16 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
javascript loadScript异步加载脚本示例讲解
2013/11/14 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
2014/04/16 Javascript
javascript 闭包详解
2015/02/15 Javascript
JavaScript Sort 的一个错误用法示例
2015/03/20 Javascript
小议JavaScript中Generator和Iterator的使用
2015/07/29 Javascript
浅析BootStrap模态框的使用(经典)
2016/04/29 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
2016/12/07 Javascript
js实现类bootstrap模态框动画
2017/02/07 Javascript
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
2017/09/28 Javascript
angular json对象push到数组中的方法
2018/02/27 Javascript
js删除数组中某几项的方法总结
2019/01/16 Javascript
javascript实现扫雷简易版
2020/08/18 Javascript
js面向对象封装级联下拉菜单列表的实现步骤
2021/02/08 Javascript
python函数返回多个值的示例方法
2013/12/04 Python
Python2.7+pytesser实现简单验证码的识别方法
2017/12/29 Python
简单谈谈python中的lambda表达式
2018/01/19 Python
Python实现统计给定列表中指定数字出现次数的方法
2018/04/11 Python
pandas分批读取大数据集教程
2020/06/06 Python
纯CSS3+DIV实现小三角形边框效果的示例代码
2020/08/03 HTML / CSS
viagogo波兰票务平台:演唱会、体育比赛、戏剧门票
2018/04/23 全球购物
应届毕业生通用的自荐书范文
2014/02/07 职场文书
一岗双责责任书
2014/04/15 职场文书
党员评议个人总结
2014/10/20 职场文书
党的群众路线教育实践活动心得体会范文
2014/11/05 职场文书
教师个人发展总结
2015/02/11 职场文书
大学生思想道德自我评价
2015/03/09 职场文书
导游词之河北白洋淀
2020/01/15 职场文书
详解Python小数据池和代码块缓存机制
2021/04/07 Python
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android
Redis实现主从复制方式(Master&Slave)
2022/06/21 Redis