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 相关文章推荐
聊天室php&amp;mysql(五)
Oct 09 PHP
PHP 飞信好友免费短信API接口开源版
Jul 22 PHP
解析php时间戳与日期的转换
Jun 06 PHP
基于PHP导出Excel的小经验 完美解决乱码问题
Jun 10 PHP
dedecms函数分享之获取某一栏目所有子栏目
May 19 PHP
避免Smarty与CSS语法冲突的方法
Mar 02 PHP
php实现的操作excel类详解
Jan 15 PHP
Zend Framework连接Mysql数据库实例分析
Mar 19 PHP
Thinkphp微信公众号支付接口
Aug 04 PHP
Yii2 如何在modules中添加验证码的方法
Jun 19 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 PHP
Laravel框架使用Seeder实现自动填充数据功能
Jun 13 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
PHP Header用于页面跳转要注意的几个问题总结
2008/10/03 PHP
关于laravel5.5的定时任务详解(demo)
2019/10/23 PHP
js中的值类型和引用类型小结 文字说明与实例
2010/12/12 Javascript
jQuery版仿Path菜单效果
2011/12/15 Javascript
js闭包引起的事件注册问题介绍
2016/03/29 Javascript
JavaScript学习小结之使用canvas画“哆啦A梦”时钟
2016/07/24 Javascript
node.js操作mysql简单实例
2017/05/25 Javascript
Angular 4依赖注入学习教程之InjectToken的使用(八)
2017/06/04 Javascript
javascript兼容性(实例讲解)
2017/08/15 Javascript
关于angularJs清除浏览器缓存的方法
2017/11/28 Javascript
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
Vue 实现展开折叠效果的示例代码
2018/08/27 Javascript
微信小程序与webview交互实现支付功能
2019/06/07 Javascript
python Django模板的使用方法(图文)
2013/11/04 Python
Python接收Gmail新邮件并发送到gtalk的方法
2015/03/10 Python
python requests 使用快速入门
2017/08/31 Python
Django数据库表反向生成实例解析
2018/02/06 Python
对numpy中布尔型数组的处理方法详解
2018/04/17 Python
利用Anaconda简单安装scrapy框架的方法
2018/06/13 Python
python学习--使用QQ邮箱发送邮件代码实例
2019/04/16 Python
Python-Seaborn热图绘制的实现方法
2019/07/15 Python
python进程间通信Queue工作过程详解
2019/11/01 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
Pytest单元测试框架如何实现参数化
2020/09/05 Python
Python selenium环境搭建实现过程解析
2020/09/08 Python
html5页面结构_动力节点Java学院整理
2017/07/10 HTML / CSS
《雪儿》教学反思
2014/04/17 职场文书
机械专业技术员求职信
2014/06/14 职场文书
安全保卫工作竞聘材料
2014/08/25 职场文书
2014入党积极分子破除“四风”思想汇报
2014/09/14 职场文书
大一新生检讨书
2014/10/29 职场文书
中学社团活动总结
2015/05/07 职场文书
2015仓库保管员年终工作总结
2015/05/13 职场文书
反腐倡廉心得体会2016
2016/01/13 职场文书
高三语文教学反思
2016/02/16 职场文书
二年级作文之动物作文
2019/11/13 职场文书