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经典的给图片加水印程序
Dec 06 PHP
mysql+php分页类(已测)
Mar 31 PHP
简单实现限定phpmyadmin访问ip的方法
Mar 05 PHP
基于PHP magic_quotes_gpc的使用方法详解
Jun 24 PHP
PHP的Socket网络编程入门指引
Aug 11 PHP
yii2超好用的日期组件和时间组件
May 05 PHP
Yii2.0 Basic代码中路由链接被转义的处理方法
Sep 21 PHP
php文件管理基本功能简单操作
Jan 16 PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
May 29 PHP
php插入mysql数据返回id的方法
May 31 PHP
Thinkphp整合阿里云OSS图片上传实例代码
Apr 28 PHP
php实现简易计算器
Aug 28 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
Yii2实现UploadedFile上传文件示例
2017/02/15 PHP
浅谈php常用的7大框架的优缺点
2020/07/20 PHP
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
window.open的页面如何刷新(父页面)上层页面
2012/12/28 Javascript
js二级地域选择的实现方法
2013/06/17 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
JavaScript获取某年某月的最后一天附截图
2014/06/23 Javascript
JavaScript中伪协议 javascript:使用探讨
2014/07/18 Javascript
JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)
2016/06/24 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
Node解决简单重复问题系列之Excel内容的获取
2018/01/02 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
2018/04/26 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
vue中倒计时组件的实例代码
2018/07/06 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
2018/10/11 Javascript
vue微信分享插件使用方法详解
2020/02/18 Javascript
js中复选框的取值及赋值示例详解
2020/10/18 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
2021/01/06 Javascript
[02:43]中国五虎出征TI3视频
2013/08/02 DOTA
用 Python 连接 MySQL 的几种方式详解
2018/04/04 Python
对Python中type打开文件的方式介绍
2018/04/28 Python
Python global全局变量函数详解
2018/09/18 Python
pytorch对可变长度序列的处理方法详解
2018/12/08 Python
浅谈python 导入模块和解决文件句柄找不到问题
2018/12/15 Python
python opencv 二值化 计算白色像素点的实例
2019/07/03 Python
Python如何筛选序列中的元素的方法实现
2019/07/15 Python
Win10下python 2.7与python 3.7双环境安装教程图解
2019/10/12 Python
python3中关于excel追加写入格式被覆盖问题(实例代码)
2020/01/10 Python
美国婚礼装饰和活动用品批发供应商:Event Decor Direct
2018/10/12 全球购物
解释下列WebService名词:WSDL、SOAP、UDDI
2012/06/22 面试题
中医临床专业自我鉴定范文
2014/01/15 职场文书
《画杨桃》教学反思
2014/04/13 职场文书
市场策划求职信
2014/08/07 职场文书
学习张林森心得体会
2014/09/10 职场文书
中学感恩教育活动总结
2015/05/05 职场文书
医护人员继续教育学习心得体会
2016/01/19 职场文书