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 相关文章推荐
CodeIgniter php mvc框架 中国网站
May 26 PHP
PHP 日期加减的类,很不错
Oct 10 PHP
php添加文章时生成静态HTML文章的实现代码
Feb 17 PHP
PHP设计模式之责任链模式的深入解析
Jun 13 PHP
php的sprintf函数的用法 控制浮点数格式
Feb 14 PHP
PHP函数addslashes和mysql_real_escape_string的区别
Apr 22 PHP
PHP获取MySql新增记录ID值的3种方法
Jun 24 PHP
PHP中$_SERVER使用说明
Jul 05 PHP
Zend Framework教程之动作的基类Zend_Controller_Action详解
Mar 07 PHP
PHP实现的MD5结合RSA签名算法实例
Oct 07 PHP
php调用云片网接口发送短信的实现方法
Oct 25 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
Nov 23 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
阿拉伯的咖啡与水烟
2021/03/03 咖啡文化
php 模拟 asp.net webFrom 按钮提交事件的思路及代码
2013/12/02 PHP
php实例分享之二维数组排序
2014/05/15 PHP
php导出生成word的方法
2015/12/25 PHP
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
js function定义函数使用心得
2010/04/15 Javascript
基于jquery的checkbox下拉框插件代码
2010/06/25 Javascript
动态的改变IFrame的高度实现IFrame自动伸展适应高度
2012/12/28 Javascript
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
Jquery实现搜索框提示功能示例代码
2013/08/13 Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
2014/05/22 Javascript
详解jquery中$.ajax方法提交表单
2014/11/03 Javascript
AngularJS基础知识
2014/12/21 Javascript
JS 动态判断PC和手机浏览器实现代码
2016/09/21 Javascript
简单的js表格操作
2016/09/24 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
2017/02/23 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
实时监控input框,实现输入框与下拉框联动的实例
2018/01/23 Javascript
js实现倒计时器自定义时间和暂停
2019/02/25 Javascript
jquery 回调操作实例分析【回调成功与回调失败的情况】
2019/09/27 jQuery
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
2020/05/21 Javascript
ant design的table组件实现全选功能以及自定义分页
2020/11/17 Javascript
解决vue页面刷新,数据丢失的问题
2020/11/24 Vue.js
vue-router懒加载的3种方式汇总
2021/02/28 Vue.js
[01:08]2014DOTA2展望TI 剑指西雅图LGD战队专访
2014/06/30 DOTA
Python使用Pandas读写Excel实例解析
2019/11/19 Python
django实现将后台model对象转换成json对象并传递给前端jquery
2020/03/16 Python
python os模块在系统管理中的应用
2020/06/22 Python
python regex库实例用法总结
2021/01/03 Python
手对手的教你用canvas画一个简单的海报的方法示例
2018/12/10 HTML / CSS
玛蒂尔达简服装:Matilda Jane Clothing
2019/02/13 全球购物
小学教师师德师风个人整改措施
2014/09/18 职场文书
学习新党章心得体会2016
2016/01/15 职场文书
Python数据类型最全知识总结
2021/05/31 Python
Python获取江苏疫情实时数据及爬虫分析
2021/08/02 Python
修改Nginx配置返回指定content-type的方法
2022/09/23 Servers