Ver Mensaje Individual
  #3 (permalink)  
Antiguo 24/12/2013, 21:28
nksn
 
Fecha de Ingreso: mayo-2009
Ubicación: Japon
Mensajes: 60
Antigüedad: 15 años, 6 meses
Puntos: 12
Respuesta: introduccion sistemas dinamicos ( php + ajax )

www/src/php.js (unserialize)

esta función es de phpjs.org, decodifica los datos codificados desde php con serialize()

Código Javascript:
Ver original
  1. function unserialize (data) {
  2.   // From: http://phpjs.org/functions
  3.   // +     original by: Arpad Ray (mailto:[email protected])
  4.   // +     improved by: Pedro Tainha (http://www.pedrotainha.com)
  5.   // +     bugfixed by: dptr1988
  6.   // +      revised by: d3x
  7.   // +     improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  8.   // +        input by: Brett Zamir (http://brett-zamir.me)
  9.   // +     improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  10.   // +     improved by: Chris
  11.   // +     improved by: James
  12.   // +        input by: Martin (http://www.erlenwiese.de/)
  13.   // +     bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  14.   // +     improved by: Le Torbi
  15.   // +     input by: kilops
  16.   // +     bugfixed by: Brett Zamir (http://brett-zamir.me)
  17.   // +      input by: Jaroslaw Czarniak
  18.   // +     improved by: Eli Skeggs
  19.   // %            note: We feel the main purpose of this function should be to ease the transport of data between php & js
  20.   // %            note: Aiming for PHP-compatibility, we have to translate objects to arrays
  21.   // *       example 1: unserialize('a:3:{i:0;s:5:"Kevin";i:1;s:3:"van";i:2;s:9:"Zonneveld";}');
  22.   // *       returns 1: ['Kevin', 'van', 'Zonneveld']
  23.   // *       example 2: unserialize('a:3:{s:9:"firstName";s:5:"Kevin";s:7:"midName";s:3:"van";s:7:"surName";s:9:"Zonneveld";}');
  24.   // *       returns 2: {firstName: 'Kevin', midName: 'van', surName: 'Zonneveld'}
  25.   var that = this,
  26.     utf8Overhead = function (chr) {
  27.       // http://phpjs.org/functions/unserialize:571#comment_95906
  28.       var code = chr.charCodeAt(0);
  29.       if (code < 0x0080) {
  30.         return 0;
  31.       }
  32.       if (code < 0x0800) {
  33.         return 1;
  34.       }
  35.       return 2;
  36.     },
  37.     error = function (type, msg, filename, line) {
  38.       throw new that.window[type](msg, filename, line);
  39.     },
  40.     read_until = function (data, offset, stopchr) {
  41.       var i = 2, buf = [], chr = data.slice(offset, offset + 1);
  42.  
  43.       while (chr != stopchr) {
  44.         if ((i + offset) > data.length) {
  45.           error('Error', 'Invalid');
  46.         }
  47.         buf.push(chr);
  48.         chr = data.slice(offset + (i - 1), offset + i);
  49.         i += 1;
  50.       }
  51.       return [buf.length, buf.join('')];
  52.     },
  53.     read_chrs = function (data, offset, length) {
  54.       var i, chr, buf;
  55.  
  56.       buf = [];
  57.       for (i = 0; i < length; i++) {
  58.         chr = data.slice(offset + (i - 1), offset + i);
  59.         buf.push(chr);
  60.         length -= utf8Overhead(chr);
  61.       }
  62.       return [buf.length, buf.join('')];
  63.     },
  64.     _unserialize = function (data, offset) {
  65.       var dtype, dataoffset, keyandchrs, keys, contig,
  66.         length, array, readdata, readData, ccount,
  67.         stringlength, i, key, kprops, kchrs, vprops,
  68.         vchrs, value, chrs = 0,
  69.         typeconvert = function (x) {
  70.           return x;
  71.         };
  72.  
  73.       if (!offset) {
  74.         offset = 0;
  75.       }
  76.       dtype = (data.slice(offset, offset + 1)).toLowerCase();
  77.  
  78.       dataoffset = offset + 2;
  79.  
  80.       switch (dtype) {
  81.         case 'i':
  82.           typeconvert = function (x) {
  83.             return parseInt(x, 10);
  84.           };
  85.           readData = read_until(data, dataoffset, ';');
  86.           chrs = readData[0];
  87.           readdata = readData[1];
  88.           dataoffset += chrs + 1;
  89.           break;
  90.         case 'b':
  91.           typeconvert = function (x) {
  92.             return parseInt(x, 10) !== 0;
  93.           };
  94.           readData = read_until(data, dataoffset, ';');
  95.           chrs = readData[0];
  96.           readdata = readData[1];
  97.           dataoffset += chrs + 1;
  98.           break;
  99.         case 'd':
  100.           typeconvert = function (x) {
  101.             return parseFloat(x);
  102.           };
  103.           readData = read_until(data, dataoffset, ';');
  104.           chrs = readData[0];
  105.           readdata = readData[1];
  106.           dataoffset += chrs + 1;
  107.           break;
  108.         case 'n':
  109.           readdata = null;
  110.           break;
  111.         case 's':
  112.           ccount = read_until(data, dataoffset, ':');
  113.           chrs = ccount[0];
  114.           stringlength = ccount[1];
  115.           dataoffset += chrs + 2;
  116.  
  117.           readData = read_chrs(data, dataoffset + 1, parseInt(stringlength, 10));
  118.           chrs = readData[0];
  119.           readdata = readData[1];
  120.           dataoffset += chrs + 2;
  121.           if (chrs != parseInt(stringlength, 10) && chrs != readdata.length) {
  122.             error('SyntaxError', 'String length mismatch');
  123.           }
  124.           break;
  125.         case 'a':
  126.           readdata = {};
  127.  
  128.           keyandchrs = read_until(data, dataoffset, ':');
  129.           chrs = keyandchrs[0];
  130.           keys = keyandchrs[1];
  131.           dataoffset += chrs + 2;
  132.  
  133.           length = parseInt(keys, 10);
  134.           contig = true;
  135.  
  136.           for (i = 0; i < length; i++) {
  137.             kprops = _unserialize(data, dataoffset);
  138.             kchrs = kprops[1];
  139.             key = kprops[2];
  140.             dataoffset += kchrs;
  141.  
  142.             vprops = _unserialize(data, dataoffset);
  143.             vchrs = vprops[1];
  144.             value = vprops[2];
  145.             dataoffset += vchrs;
  146.  
  147.             if (key !== i)
  148.               contig = false;
  149.  
  150.             readdata[key] = value;
  151.           }
  152.  
  153.           if (contig) {
  154.             array = new Array(length);
  155.             for (i = 0; i < length; i++)
  156.               array[i] = readdata[i];
  157.             readdata = array;
  158.           }
  159.  
  160.           dataoffset += 1;
  161.           break;
  162.         default:
  163.           error('SyntaxError', 'Unknown / Unhandled data type(s): ' + dtype);
  164.           break;
  165.       }
  166.       return [dtype, dataoffset - offset, typeconvert(readdata)];
  167.     }
  168.   ;
  169.  
  170.   return _unserialize((data + ''), 0)[2];
  171. }