fork(2) download
  1. <?php
  2. define('URL_BASE64_FROM', '+/');
  3. define('URL_BASE64_TO', '-_');
  4. function url_base64_encode($data) {
  5. $encoded = base64_encode($data);
  6. if ($encoded === false) {
  7. return false;
  8. }
  9. return str_replace('=', '', strtr($encoded, URL_BASE64_FROM, URL_BASE64_TO));
  10. }
  11. function url_base64_decode($data) {
  12. $len = strlen($data);
  13. if (is_null($len)) {
  14. return false;
  15. }
  16. $padded = str_pad($data, 4 - $len % 4, '=', STR_PAD_RIGHT);
  17. return base64_decode(strtr($padded, URL_BASE64_TO, URL_BASE64_FROM));
  18. }
  19. define('PACK_NUMS_FORMAT', 'n*');
  20. function pack_nums($num_arr) {
  21. array_unshift($num_arr, PACK_NUMS_FORMAT);
  22. return call_user_func_array('pack', $num_arr);
  23. }
  24. function unpack_nums($packed_arr) {
  25. return unpack(PACK_NUMS_FORMAT, $packed_arr);
  26. }
  27. function url_embed_array($arr) {
  28. return url_base64_encode(gzcompress(pack_nums($arr)));
  29. }
  30. function url_parse_array($data) {
  31. return unpack_nums(gzuncompress(url_base64_decode($data)));
  32. }
  33. // #####
  34. $arr = array(7,2,3,4,5,6,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,52,53,54,61);
  35. $encoded = url_embed_array($arr);
  36. printf("%d: %s\n", strlen($encoded), $encoded);
  37. $decoded = url_parse_array($encoded);
  38. print_r($decoded);
  39. ?>
Success #stdin #stdout 0.01s 20568KB
stdin
Standard input is empty
stdout
91: eJwFwVkWQgAAAMB5siSRqFQixA3Un_tfqxmJwE4oEttLHWSOcoWT0lmldnF107h7eGq9dHpvg9HkY7ZYff1sf14QA5s
Array
(
    [1] => 7
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 5
    [6] => 6
    [7] => 8
    [8] => 9
    [9] => 10
    [10] => 11
    [11] => 12
    [12] => 13
    [13] => 14
    [14] => 15
    [15] => 16
    [16] => 17
    [17] => 18
    [18] => 19
    [19] => 20
    [20] => 21
    [21] => 22
    [22] => 23
    [23] => 24
    [24] => 25
    [25] => 26
    [26] => 27
    [27] => 28
    [28] => 29
    [29] => 30
    [30] => 31
    [31] => 32
    [32] => 33
    [33] => 34
    [34] => 35
    [35] => 36
    [36] => 37
    [37] => 52
    [38] => 53
    [39] => 54
    [40] => 61
)