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下mysql数据库操作类(改自discuz)
Jul 03 PHP
php关于array_multisort多维数组排序的使用说明
Jan 04 PHP
phpcms模块开发之swfupload的使用介绍
Apr 28 PHP
解析php5配置使用pdo
Jul 03 PHP
PHP按行读取文件时删除换行符的3种方法
May 04 PHP
PHP中的插件机制原理和实例
Jul 08 PHP
19个Android常用工具类汇总
Dec 30 PHP
PHP简单实现文本计数器的方法
Apr 28 PHP
Thinkphp连表查询及数据导出方法示例
Oct 15 PHP
PHP使用ActiveMQ实例
Feb 05 PHP
php命令行写shell实例详解
Jul 19 PHP
PHP parse_ini_file函数的应用与扩展操作示例
Jan 07 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编程语言开发动态WAP页面
2006/10/09 PHP
PHP中实现进程间通讯
2006/10/09 PHP
关于访问控制的一首PHP面试题(对属性或方法的访问控制)
2012/09/13 PHP
分享十款最出色的PHP安全开发库中文详细介绍
2015/03/22 PHP
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
Yii2 rbac权限控制之rule教程详解
2016/06/23 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
php字符串截取函数mb_substr用法实例分析
2019/06/25 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
2020/11/10 PHP
默认让页面的第一个控件选中的javascript代码
2009/12/26 Javascript
js 编码转换 gb2312 和 utf8 互转的2种方法
2013/08/07 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
原生js实现日期联动
2015/01/12 Javascript
webpack学习教程之publicPath路径问题详解
2017/06/17 Javascript
VueJs监听window.resize方法示例
2018/01/17 Javascript
JS实现的抛物线运动效果示例
2018/01/30 Javascript
详解基于DllPlugin和DllReferencePlugin的webpack构建优化
2018/06/28 Javascript
elementUI 设置input的只读或禁用的方法
2018/10/30 Javascript
详解vue的双向绑定原理及实现
2019/05/05 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
2019/09/16 Javascript
Vue使用虚拟dom进行渲染view的方法
2019/12/26 Javascript
如何构建 vue-ssr 项目的方法步骤
2020/08/04 Javascript
微信小程序实现加入购物车滑动轨迹
2020/11/18 Javascript
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
2013/11/27 Python
python贪吃蛇游戏代码
2020/04/18 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
python图形开发GUI库pyqt5的基本使用方法详解
2020/02/14 Python
python实现输入三角形边长自动作图求面积案例
2020/04/12 Python
Python devel安装失败问题解决方案
2020/06/09 Python
爱他美官方海外旗舰店:Aptamil奶粉
2017/12/22 全球购物
2014年乡镇领导个人整改措施
2014/09/19 职场文书
工厂清洁工岗位职责
2015/02/14 职场文书
可怜妈妈观后感
2015/06/09 职场文书
小学生必读成语故事大全:送给暑假的你们
2019/07/09 职场文书
分析SQL窗口函数之取值窗口函数
2022/04/21 Oracle