From cff9883438802c4053da8ef6e4b9429dab214c6c Mon Sep 17 00:00:00 2001 From: Tarwin Stroh-Spijer Date: Mon, 20 Sep 2021 12:51:16 -0700 Subject: [PATCH 1/2] fix: deserializing associate arrays that have "0" as key --- phpUnserialize.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpUnserialize.js b/phpUnserialize.js index 26e2d0f..50ea203 100644 --- a/phpUnserialize.js +++ b/phpUnserialize.js @@ -139,7 +139,7 @@ for (i = 0; i < len; i++) { key = readKey(); val = parseNext(); - if (keep === resultArray && parseInt(key, 10) === i) { + if (keep === resultArray && key + '' === i + '') { // store in array version resultArray.push(val); From e836e017e6c4f8045afe4c1a3fd169c2831ab7ec Mon Sep 17 00:00:00 2001 From: Tarwin Stroh-Spijer Date: Tue, 26 Oct 2021 08:46:53 -0700 Subject: [PATCH 2/2] feat: added an option for `floatPrecision`. If set will round floats to this precision. --- phpUnserialize.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/phpUnserialize.js b/phpUnserialize.js index 50ea203..6cbaec7 100644 --- a/phpUnserialize.js +++ b/phpUnserialize.js @@ -30,9 +30,10 @@ * Parse php serialized data into js objects. * * @param {String} phpstr Php serialized string to parse + * @param {Object} options Options object: floatPrecision (int) must be above 0 to work * @return {mixed} Parsed result */ - return function (phpstr) { + return function (phpstr, options = {}) { var idx = 0 , refStack = [] , ridx = 0 @@ -63,6 +64,9 @@ , val = phpstr.substring(idx, del); idx = del + 1; val = parseFloat(val); + if (options && options.floatPrecision) { + val = parseFloat(val.toFixed(options.floatPrecision)); + } refStack[ridx++] = val; return val; } //end parseAsFloat