php實現encode64編碼類別執行個體_PHP教程

來源:互聯網
上載者:User

php實現encode64編碼類別執行個體


這篇文章主要介紹了php實現encode64編碼類別,執行個體分析了php實現encode64編碼的技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文執行個體講述了php實現encode64編碼類別。分享給大家供大家參考。具體如下:

encode64可以獲得最短的由26個英文大小寫字母數字加上"-_"兩個符號編碼的資料, 這個個字串可以在網路自由傳輸, 無需考慮被自動轉碼引起的混亂. 缺點: 對於大字串太慢了, 原因不明, 可能PHP指令碼本身就是慢, 所以它內建 很多函數, 這些函數如果用指令碼來實現是不可忍受的. 而JavaScript就沒這個問題, 指令碼的速度快的多.

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

//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程式設計有所協助。

http://www.bkjia.com/PHPjc/973111.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/973111.htmlTechArticlephp實現encode64編碼類別執行個體 這篇文章主要介紹了php實現encode64編碼類別,執行個體分析了php實現encode64編碼的技巧,具有一定參考借鑒價值,需要的朋友可...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.