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 相关文章推荐
用cookies来跟踪识别用户
Oct 09 PHP
php 进度条实现代码
Mar 10 PHP
php htmlspecialchars加强版
Feb 16 PHP
第五章 php数组操作
Dec 30 PHP
基于php下载文件的详解
Jun 02 PHP
php防止伪造数据从地址栏URL提交的方法
Aug 24 PHP
php中chdir()函数用法实例
Nov 13 PHP
学习php开源项目的源码指南
Dec 21 PHP
PHP实现上传多文件示例代码
Feb 20 PHP
PHP异步进程助手async-helper
Feb 05 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
Oct 12 PHP
laravel自定义分页的实现案例offset()和limit()
Oct 15 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 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
php 如何获取文件的后缀名
2016/06/05 PHP
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
动态样式类封装JS代码
2009/09/02 Javascript
基于jquery的关于动态创建DOM元素的问题
2010/12/24 Javascript
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
jQuery动态添加 input type=file的实现代码
2012/06/14 Javascript
Js-$.extend扩展方法使方法参数更灵活
2013/01/15 Javascript
jquery下div 的resize事件示例代码
2014/03/09 Javascript
详解JavaScript的while循环的使用
2015/06/03 Javascript
javascript图片滑动效果实现
2021/01/28 Javascript
jQuery对象与DOM对象转换方法详解
2016/05/10 Javascript
BootStrap中的表单大全
2016/09/07 Javascript
JavaScript解析JSON格式数据的方法示例
2017/01/24 Javascript
jquery 仿锚点跳转到页面指定位置的实例
2017/02/14 Javascript
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
springMvc 前端用json的方式向后台传递对象数组方法
2018/08/07 Javascript
Vue实现用户自定义字段显示数据的方法
2018/08/28 Javascript
jQuery动态操作表单示例【基于table表格】
2018/12/06 jQuery
js图片无缝滚动插件使用详解
2020/05/26 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
[07:31]DOTA2卡尔工作室 英雄介绍主宰篇
2013/06/25 DOTA
python中使用pyhook实现键盘监控的例子
2014/07/18 Python
python爬虫headers设置后无效的解决方法
2017/10/21 Python
Python 经典面试题 21 道【不可错过】
2018/09/21 Python
连接pandas以及数组转pandas的方法
2019/06/28 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
Giglio美国站:意大利奢侈品购物网
2018/02/10 全球购物
体育专业求职信
2014/07/16 职场文书
安全教育培训制度
2015/08/06 职场文书
2015年评职称个人工作总结
2015/10/15 职场文书
2015教师个人年度工作总结
2015/10/23 职场文书
《鸟的天堂》教学反思
2016/02/19 职场文书
浅谈Python数学建模之整数规划
2021/06/23 Python