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排序之二维数组的按照字母排序实现代码
Aug 13 PHP
Laravel 5框架学习之日期,Mutator 和 Scope
Apr 08 PHP
php实现求相对时间函数
Jun 15 PHP
PHP常用技巧汇总
Mar 04 PHP
总结PHP删除字符串最后一个字符的三种方法
Aug 30 PHP
PHP缩略图生成和图片水印制作
Jan 07 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
Nov 20 PHP
CentOS7编译安装php7.1的教程详解
Apr 18 PHP
thinkPHP5.1框架中Request类四种调用方式示例
Aug 03 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
Mar 02 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
Mar 26 PHP
php自动加载代码实例详解
Feb 26 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
Windows PHP5和Apache的安装与配置
2009/06/08 PHP
php url路由入门实例
2014/04/23 PHP
PHP中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
php使用Cookie实现和用户会话的方法
2015/01/21 PHP
Yii控制器中操作视图js的方法
2016/07/04 PHP
php的socket编程详解
2016/11/20 PHP
推荐自用 Javascript 缩图函数 (onDOMLoaded)……
2007/10/23 Javascript
JavaScript 产生不重复的随机数三种实现思路
2012/12/13 Javascript
JS特殊函数(Function()构造函数、函数直接量)区别介绍
2013/05/19 Javascript
javascript 获取浏览器版本
2015/01/21 Javascript
详解JavaScript中的every()方法
2015/06/08 Javascript
JS实现黑色大气的二级导航菜单效果
2015/09/18 Javascript
jQuery自动完成插件completer附源码下载
2016/01/04 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
浅谈js中用$(#ID)来作为选择器的问题(id重复的时候)
2017/02/14 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
详解vue在项目中使用百度地图
2019/03/26 Javascript
bootstrap table实现横向合并与纵向合并
2019/07/18 Javascript
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
vue实现从外部修改组件内部的变量的值
2020/07/30 Javascript
JavaScript中的函数式编程详解
2020/08/22 Javascript
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
2019/07/25 Python
Python 字符串类型列表转换成真正列表类型过程解析
2019/08/26 Python
日本最大美瞳直送网:Morecontact(中文)
2019/04/03 全球购物
内科护士实习自我鉴定
2013/10/17 职场文书
财务信息服务专业自荐书范文
2014/02/08 职场文书
《哪吒闹海》教学反思
2014/02/28 职场文书
交通运输局四风问题对照检查材料思想汇报
2014/10/09 职场文书
2014员工聘用协议书(最新版)
2014/11/24 职场文书
巾帼文明岗事迹材料
2014/12/24 职场文书
明星邀请函
2015/02/02 职场文书
出国留学导师推荐信
2015/03/26 职场文书
亮剑观后感600字
2015/06/05 职场文书
鲁滨孙漂流记读书笔记
2015/06/30 职场文书