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 相关文章推荐
第十节 抽象方法和抽象类 [10]
Oct 09 PHP
php下使用以下代码连接并测试
Apr 09 PHP
PHP 定界符 使用技巧
Jun 14 PHP
PHP+JS+rsa数据加密传输实现代码
Mar 23 PHP
php中3种方法统计字符串中每种字符的个数并排序
Aug 27 PHP
php daddslashes()和 saddslashes()有哪些区别分析
Oct 26 PHP
PHP 登录记住密码实现思路
May 07 PHP
php计算两个日期相差天数的方法
Mar 14 PHP
PHP中error_reporting函数用法详细介绍
Jun 11 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
PHP中常见的密码处理方式和建议总结
Oct 14 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
May 13 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
当海贼王变成JOJO风
2020/03/02 日漫
一个php作的文本留言本的例子(二)
2006/10/09 PHP
PHP初学者常见问题集合 修正版(21问答)
2010/03/23 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
让textarea控件的滚动条怎是位与最下方
2007/04/20 Javascript
用JS剩余字数计算的代码
2008/07/03 Javascript
javascript 自定义事件初探
2009/08/21 Javascript
33种Javascript 表格排序控件收集
2009/12/03 Javascript
js中substr,substring,indexOf,lastIndexOf的用法小结
2013/12/27 Javascript
ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
2014/05/02 Javascript
JavaScript实现的简单烟花特效代码
2015/10/20 Javascript
js输入框使用正则表达式校验输入内容的实例
2017/02/12 Javascript
彻底学会Angular.js中的transclusion
2017/03/12 Javascript
原生JS实现不断变化的标签
2017/05/22 Javascript
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
bootstrap下拉框动态赋值方法
2018/08/10 Javascript
微信小程序实现限制用户转发功能的实例代码
2020/02/22 Javascript
javascript设计模式 ? 适配器模式原理与应用实例分析
2020/04/13 Javascript
如何利用nodejs实现命令行游戏
2020/11/24 NodeJs
Python的高级Git库 Gittle
2014/09/22 Python
使用Python脚本将文字转换为图片的实例分享
2015/08/29 Python
Python手机号码归属地查询代码
2016/05/04 Python
Django 生成登陆验证码代码分享
2017/12/12 Python
Python线程之定位与销毁的实现
2019/02/17 Python
python中比较两个列表的实例方法
2019/07/04 Python
python Gunicorn服务器使用方法详解
2019/07/22 Python
python使用pyecharts库画地图数据可视化的实现
2020/03/25 Python
python爬虫爬取网页数据并解析数据
2020/09/18 Python
手工制作的音乐盒:Music Box Attic
2019/09/05 全球购物
TecoBuy澳大利亚:在线电子和小工具商店
2020/06/25 全球购物
雷朋巴西官方商店:Ray-Ban Brasil
2020/07/21 全球购物
交通文明倡议书
2014/05/16 职场文书
2014卖家双十一活动策划书
2014/09/29 职场文书
2014年大学生村官工作总结
2014/11/19 职场文书
教师岗位职责范本
2015/04/02 职场文书
WebRTC记录音视频流(web技术分享)
2022/02/24 Javascript