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 身份验证方面的函数
Oct 11 PHP
PHPMyadmin 配置文件详解(配置)
Dec 03 PHP
php 多关键字 高亮显示实现代码
Apr 23 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
Jun 10 PHP
非常好用的Zend Framework分页类
Jun 25 PHP
php实现字符串首字母大写和单词首字母大写的方法
Mar 14 PHP
非常全面的php日期时间运算汇总
Nov 04 PHP
WordPress开发中短代码的实现及相关函数使用技巧
Jan 05 PHP
HTML中嵌入PHP的简单方法
Feb 16 PHP
thinkPHP5.0框架独立配置与动态配置方法
Mar 17 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
Sep 22 PHP
PHP实现随机发扑克牌
Apr 22 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
redis 队列操作的例子(php)
2012/04/12 PHP
php开发文档 会员收费1期
2012/08/14 PHP
浅析php适配器模式(Adapter)
2014/11/25 PHP
PHP实现的简单分页类及用法示例
2016/05/06 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
2017/04/01 PHP
javascript优先加载笔记代码
2008/09/30 Javascript
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
js 编码转换 gb2312 和 utf8 互转的2种方法
2013/08/07 Javascript
JavaScript模拟实现继承的方法
2015/03/30 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
2015/06/11 Javascript
深入理解JavaScript内置函数
2016/06/03 Javascript
javascript中Date对象应用之简易日历实现
2016/07/12 Javascript
JS中的函数与对象的创建方式
2019/05/12 Javascript
vue 移动端注入骨架屏的配置方法
2019/06/25 Javascript
详解ES6 Promise的生命周期和创建
2019/08/18 Javascript
原生js实现随机点餐效果
2019/12/10 Javascript
jQuery带控制按钮轮播图插件
2020/07/31 jQuery
[04:03]辉夜杯主赛事 12月25日RECAP精彩回顾
2015/12/26 DOTA
Python中使用Beautiful Soup库的超详细教程
2015/04/30 Python
举例简单讲解Python中的数据存储模块shelve的用法
2016/03/03 Python
python实现windows下文件备份脚本
2018/05/27 Python
python设置值及NaN值处理方法
2018/07/03 Python
python编辑用户登入界面的实现代码
2018/07/16 Python
python中for循环变量作用域及用法详解
2019/11/05 Python
python3 pathlib库Path类方法总结
2019/12/26 Python
python 多线程死锁问题的解决方案
2020/08/25 Python
CSS3基础(RGBa、text-shadow、box-shadow、border-radius)
2012/11/13 HTML / CSS
HTML5 MiranaVideo播放器 (代码开源)
2010/06/11 HTML / CSS
使用postMessage让 iframe自适应高度的方法示例
2019/10/08 HTML / CSS
Boutique 1美国:阿联酋奢侈时尚零售商
2017/10/16 全球购物
英国图书音像网站:Hive.co.uk(图书、电子书、DVD、蓝光、音乐CD等)
2017/10/16 全球购物
会计专业毕业生自荐信范文
2013/12/20 职场文书
租房协议书
2014/09/12 职场文书
中学政教处工作总结
2015/08/13 职场文书
JS中如何优雅的使用async await详解
2021/10/05 Javascript