ホームページ  >  記事  >  バックエンド開発  >  PHPのencode64エンコードクラス

PHPのencode64エンコードクラス

WBOY
WBOYオリジナル
2016-07-25 08:43:281145ブラウズ

encode64 は、26 個の英語の大文字と小文字と数字と 2 つの記号「-_」でエンコードされた最短のデータを取得できます。この文字列は、自動トランスコーディングによって引き起こされる混乱を考慮せずに、ネットワーク上で自由に送信できます。 欠点: 大きな文字列の場合。原因は不明ですが、おそらく PHP スクリプト自体が遅いため、これらの関数がスクリプトに実装されていれば、この問題は発生せず、スクリプトははるかに高速になります。

  1. //encode64 エンコードは、選択された文字がエンコードされないため、同時に encodeURI、encodeURIComponent、および endode 関数を置き換えることができます。 {
  2. $ key = 'paawo65gouf7ik2vi9-xq8cftexlcdy1hd3tv0ryzjbpn_blnss4mgrkqwmzjeuh'; 2;$v = 0 ;
  3. for (; $i < $len; $i += 3) {
  4. $v = $a[$i - 2] + ($a[$i - 1] << ; 8) + ($ a[$i] <16);
  5. $s .= $KEY[$v & 0x3f];
  6. $s .= $KEY[($v >> 6) & 0x3f];
  7. $s .= $KEY[($v >> 12) & 0x3f];
  8. $s .= $KEY[($v >> 18)];
  9. }
  10. if ($res == 1) {
  11. $v = $a[$i - 2];
  12. $s .= $KEY[$v & 0x3f];
  13. $s .= $KEY[($v >> 6) & 0x3f];
  14. } else if ($res == 2) {
  15. $v = $a[$i - 2] + ($a[$i - 1] << 8);
  16. $s .= $ KEY[$v & 0x3f ];
  17. $s .= $KEY[($v >> 6) & 0x3f];
  18. $s .= $KEY[($v >> 12) & 0x3f];
  19. }
  20. return $s ;
  21. }
  22. function decode($codeStr) {
  23. $KEY = 'PaAwO65goUf7IK2vi9-xq8cFTEXLCDY1Hd3tV0ryzjbpN_BlnSs4mGRkQWMZJeuh';
  24. $dic = array();
  25. for ($i = 0; $i $dic [$KEY[$i]] = $i;
  26. }
  27. $len = strlen($codeStr);
  28. $res = $len % 4;
  29. $cLen = Floor($len/4) *3;
  30. if( $res==2) $clen += 1;
  31. elseif($res==3) $clen += 2;
  32. $code = range(0,$clen);
  33. $i = 3 ;$v = 0; $j = 0;
  34. for (; $i $v = $dic[$codeStr[$i - 3]];
  35. $v + = $dic[$codeStr [$i - 2]] << 6;
  36. $v += $dic[$codeStr[$i - 1]] << 12;
  37. $v += $dic[ $codeStr[$i] ] << 18;
  38. $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 または1 つではなく 3 つの状況が発生した場合は、それを破棄します。
  44. $v = $dic[$codeStr[$i - 3]];
  45. $v += $dic[$codeStr[$i - 2]] << ; 6;
  46. $code [$j] = $v & 0xff;
  47. } else if ($res == 3) {
  48. $v = $dic[$codeStr[$i - 3]];
  49. $v += $dic[$codeStr[$i - 2]] << 6;
  50. $v += $dic[$codeStr[$i - 1]] << 12;
  51. $code[$j] = $ v & 0xff;
  52. $ code[$j+1] = ($v >> 8) & 0xff;
  53. }
  54. return BytesToStr($code);
  55. }
  56. }
  57. function BytesToStr($bytes) {
  58. $ str = '';
  59. foreach($bytes as $ch) {
  60. $str .= chr($ch);
  61. }
  62. return iconv('UTF-16BE','utf-8',$str);
  63. }
  64. function StrToBytes($str ) {
  65. $str = iconv('utf-8','UTF-16BE',$str);
  66. $len = strlen($str);
  67. $bytes = array();
  68. の($i=0; $i $bytes[] = ord($str[$i]) ;
  69. }
  70. return $bytes;
  71. }
  72. ?>
  73. コードをコピー
php

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。