Heim  >  Artikel  >  Backend-Entwicklung  >  php的encode64编码类

php的encode64编码类

WBOY
WBOYOriginal
2016-07-25 08:43:281083Durchsuche

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

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

php


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn