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中使用Oracle数据库(6)
Oct 09 PHP
快速配置PHPMyAdmin方法
Jun 05 PHP
php下intval()和(int)转换使用与区别
Jul 18 PHP
Joomla下利用configuration.php存储简单数据
May 19 PHP
优化PHP程序的方法小结
Feb 23 PHP
解析PHP多种序列化与反序列化的方法
Jun 06 PHP
PHP小教程之实现链表
Jun 09 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
Aug 20 PHP
php实现单笔转账到支付宝功能
Oct 09 PHP
PHP中number_format()函数的用法讲解
Apr 08 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
Oct 18 PHP
laravel 查询数据库获取结果实现判断是否为空
Oct 24 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中最容易忘记的一些知识点总结
2013/04/28 PHP
php 生成签名及验证签名详解
2016/10/26 PHP
jQuery EasyUI API 中文文档 - Dialog对话框
2011/11/15 Javascript
JQuery动画和停止动画实例代码
2013/03/01 Javascript
js+css简单实现网页换肤效果
2015/12/29 Javascript
JavaScript的Backbone.js框架的一些使用建议整理
2016/02/14 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
2016/08/01 Javascript
js 中获取制定的cook信息实现方法
2016/11/19 Javascript
老生常谈jquery id选择器和class选择器的区别
2017/02/12 Javascript
import与export在node.js中的使用详解
2017/09/28 Javascript
手把手教你vue-cli单页到多页应用的方法
2018/05/31 Javascript
angular中如何绑定iframe中src的方法
2019/02/01 Javascript
Node.js系列之发起get/post请求(2)
2019/08/30 Javascript
使用Vue实现调用接口加载页面初始数据
2019/10/28 Javascript
[01:18:36]LGD vs VP Supermajor 败者组决赛 BO3 第一场 6.10
2018/07/04 DOTA
用pywin32实现windows模拟鼠标及键盘动作
2014/04/22 Python
图文讲解选择排序算法的原理及在Python中的实现
2016/05/04 Python
深入浅析ImageMagick命令执行漏洞
2016/10/11 Python
Python 解决中文写入Excel时抛异常的问题
2018/05/03 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
解决pyqt5中QToolButton无法使用的问题
2019/06/21 Python
如何运行.ipynb文件的图文讲解
2019/06/27 Python
使用python+whoosh实现全文检索
2019/12/09 Python
python Django 反向访问器的外键冲突解决
2020/05/20 Python
Python内置方法和属性应用:反射和单例(推荐)
2020/06/19 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
HTML5 创建canvas元素示例代码
2014/06/04 HTML / CSS
千禧酒店及度假村官方网站:Millennium Hotels and Resorts
2019/05/10 全球购物
教师自荐书
2013/10/08 职场文书
体育教师工作总结的自我评价
2013/10/10 职场文书
魅力教师事迹材料
2014/01/10 职场文书
婚庆公司的创业计划书
2014/01/22 职场文书
幼儿园教师教育感言
2014/02/28 职场文书
2014年幼儿园德育工作总结
2014/12/17 职场文书
《实心球》教学反思
2016/02/23 职场文书
解决MySQL存储时间出现不一致的问题
2021/04/28 MySQL