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应用中使用XOR运算加密算法分享
Aug 28 PHP
PHP循环函数使用介绍之PHP基础入门教程
Sep 21 PHP
PHP下获取上个月、下个月、本月的日期(strtotime,date)
Feb 02 PHP
php打乱数组二维数组多维数组的简单实例
Jun 17 PHP
PHP Cookie学习笔记
Aug 23 PHP
PHP strcmp()和strcasecmp()的区别实例
Nov 05 PHP
阿里云PHP SMS短信服务验证码发送方法
Jul 11 PHP
php curl上传、下载、https登陆实现代码
Jul 23 PHP
phpStudy2016 配置多个域名期间遇到的问题小结
Oct 19 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
Jan 15 PHP
PHP去除空数组且数组键名重置的讲解
Feb 28 PHP
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
Apr 16 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
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
php对文件进行hash运算的方法
2015/04/03 PHP
php使用array_search函数实现数组查找的方法
2015/06/12 PHP
php微信开发自定义菜单
2016/08/27 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
JavaScript 不只是脚本
2007/05/30 Javascript
javascript 树控件 比较好用
2009/06/11 Javascript
网络图片延迟加载实现代码 超越jquery控件
2010/03/27 Javascript
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
使用indexOf等在JavaScript的数组中进行元素查找和替换
2013/09/18 Javascript
Nodejs express框架一个工程中同时使用ejs模版和jade模版
2015/12/28 NodeJs
AngularJS Ajax详解及示例代码
2016/08/17 Javascript
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
2017/08/10 Javascript
vue 实现类似淘宝星级评分的示例
2018/03/01 Javascript
微信小程序实现音乐播放器
2019/11/20 Javascript
vue用ant design中table表格,点击某行时触发的事件操作
2020/10/28 Javascript
python Django连接MySQL数据库做增删改查
2013/11/07 Python
Python编程中用close()方法关闭文件的教程
2015/05/24 Python
Python实现将绝对URL替换成相对URL的方法
2015/06/28 Python
Pycharm学习教程(3) 代码运行调试
2017/05/03 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
2017/07/22 Python
详解python3中tkinter知识点
2018/06/21 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
python文件写入write()的操作
2019/05/14 Python
屏蔽Django admin界面添加按钮的操作
2020/03/11 Python
使用python-cv2实现视频的分解与合成的示例代码
2020/10/26 Python
pycharm配置安装autopep8自动规范代码的实现
2021/03/02 Python
澳大利亚网上书店:QBD
2021/01/09 全球购物
会计自我鉴定
2013/11/02 职场文书
《中彩那天》教学反思
2014/02/22 职场文书
工作说明书范文
2014/05/07 职场文书
婚礼答谢礼品
2015/01/20 职场文书
2016教师学习党章心得体会
2016/01/15 职场文书
Redis实现订单自动过期功能的示例代码
2021/05/08 Redis
用php如何解决大文件分片上传问题
2021/07/07 PHP
纯html+css实现奥运五环的示例代码
2021/08/02 HTML / CSS