首页 > 开发 > PHP > 正文

php实现encode64编码类实例

2024-05-04 23:33:16
字体:
来源:转载
供稿:网友

这篇文章主要介绍了php实现encode64编码类,实例分析了php实现encode64编码的技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了php实现encode64编码类。分享给大家供大家参考。具体如下:

encode64可以获得最短的由26个英文大小写字母数字加上"-_"两个符号编码的数据, 这个个字串可以在网络自由传输, 无需考虑被自动转码引起的混乱. 缺点: 对于大字串太慢了, 原因不明, 可能PHP脚本本身就是慢, 所以它内置 很多函数, 这些函数如果用脚本来实现是不可忍受的. 而JavaScript就没这个问题, 脚本的速度快的多.

 

 
  1. <?PHP 
  2. //encode64编码可以同时取代encodeURI,encodeURIComponent,endode函数 
  3. //因为选取的这些字符都不会被编码. 
  4. class Encode64{ 
  5. function code($str) { 
  6. $KEY = 'PaAwO65goUf7IK2vi9-xq8cFTEXLCDY1Hd3tV0ryzjbpN_BlnSs4mGRkQWMZJeuh'
  7. $a = StrToBytes($str); 
  8. $len = count($a); 
  9. $res = $len % 3; 
  10. $s = "";$i = 2;$v = 0; 
  11. for (; $i < $len$i += 3) { 
  12. $v = $a[$i - 2] + ($a[$i - 1] << 8) + ($a[$i] << 16); 
  13. $s .= $KEY[$v & 0x3f]; 
  14. $s .= $KEY[($v >> 6) & 0x3f]; 
  15. $s .= $KEY[($v >> 12) & 0x3f]; 
  16. $s .= $KEY[($v >> 18)]; 
  17. if ($res == 1) { 
  18. $v = $a[$i - 2]; 
  19. $s .= $KEY[$v & 0x3f]; 
  20. $s .= $KEY[($v >> 6) & 0x3f]; 
  21. else if ($res == 2) { 
  22. $v = $a[$i - 2] + ($a[$i - 1] << 8); 
  23. $s .= $KEY[$v & 0x3f]; 
  24. $s .= $KEY[($v >> 6) & 0x3f]; 
  25. $s .= $KEY[($v >> 12) & 0x3f]; 
  26. return $s
  27. function decode($codeStr) { 
  28. $KEY = 'PaAwO65goUf7IK2vi9-xq8cFTEXLCDY1Hd3tV0ryzjbpN_BlnSs4mGRkQWMZJeuh'
  29. $dic = array(); 
  30. for ($i = 0; $i < 64; $i++) { 
  31. $dic[$KEY[$i]] = $i
  32. $len = strlen($codeStr); 
  33. $res = $len % 4; 
  34. $cLen = floor($len/4)*3; 
  35. if($res==2) $clen += 1; 
  36. elseif($res==3) $clen += 2; 
  37. $code = range(0,$clen); 
  38. $i = 3;$v = 0; $j = 0; 
  39. for (; $i < $len$i += 4) { 
  40. $v = $dic[$codeStr[$i - 3]]; 
  41. $v += $dic[$codeStr[$i - 2]] << 6; 
  42. $v += $dic[$codeStr[$i - 1]] << 12; 
  43. $v += $dic[$codeStr[$i]] << 18; 
  44. $code[$j] = $v & 0xff; 
  45. $code[$j+1] = ($v >> 8) & 0xff; 
  46. $code[$j+2] = ($v >> 16) & 0xff; 
  47. $j += 3; 
  48. if ($res == 2) { 
  49. //正确的字节数肯定是余2或3, 没有1的情况, 如果出现, 舍弃. 
  50. $v = $dic[$codeStr[$i - 3]]; 
  51. $v += $dic[$codeStr[$i - 2]] << 6; 
  52. $code[$j] = $v & 0xff; 
  53. else if ($res == 3) { 
  54. $v = $dic[$codeStr[$i - 3]]; 
  55. $v += $dic[$codeStr[$i - 2]] << 6; 
  56. $v += $dic[$codeStr[$i - 1]] << 12; 
  57. $code[$j] = $v & 0xff; 
  58. $code[$j+1] = ($v >> 8) & 0xff; 
  59. return BytesToStr($code); 
  60. function BytesToStr($bytes) { 
  61. $str = ''
  62. foreach($bytes as $ch) { 
  63. $str .= chr($ch); 
  64. return iconv('UTF-16BE','utf-8',$str); 
  65. function StrToBytes($str) { 
  66. $str = iconv('utf-8','UTF-16BE',$str); 
  67. $len = strlen($str); 
  68. $bytes = array(); 
  69. for($i=0;$i<$len;$i++) { 
  70. $bytes[] = ord($str[$i]) ; 
  71. return $bytes
  72. ?> 

希望本文所述对大家的php程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表