国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 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程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 凉山| 桓台县| 原阳县| 陇西县| 会理县| 手机| 资阳市| 牡丹江市| 安丘市| 襄樊市| 巴东县| 福州市| 钟祥市| 赣榆县| 正定县| 临湘市| 全椒县| 建昌县| 蓬安县| 卢湾区| 大余县| 敦煌市| 海宁市| 台山市| 本溪| 山东省| 裕民县| 三河市| 芜湖县| 托克托县| 繁昌县| 城步| 施秉县| 栾川县| 渝中区| 兴国县| 综艺| 呼和浩特市| 五指山市| 巫山县| 崇左市|