将javascript数组转换为php不可序列化的字符串

时间:2014-09-03 19:55:17

标签: javascript php jquery

我需要将javascript数组转换为php可读的字符串" unserialize"。

在我的javascript中,我有:

var params = {};
params['showTitle'] = 0;
params['class'] = '';
params['ajax'] = 0;
params['ajaxDom'] = '';
params['what'] = 'defi';
params['color'] = 'dark';

输出我 确实需要 才能得到:

a:6:{s:9:"showTitle";i:0;s:5:"class";s:0:"";s:4:"ajax";i:0;s:7:"ajaxDom";s:0:"";s:4:"what";s:4:"defi";s:5:"color";s:4:"dark";}

为什么 需要 这个?因为服务器端的输出是红色的(php函数是unserialize),我无法改变它(它是框架的一部分)。

我的问题是:如何转换javascript数组?我已经尝试过(但没有工作):

params = JSON.stringify(params);
params = $.param(params);

应该很容易,但我被卡住了......谢谢!

3 个答案:

答案 0 :(得分:1)

请查看您是否可以使用此

http://phpjs.org/functions/serialize/

答案 1 :(得分:1)

只需将js数组作为JSON发送到服务器,然后使用json_decode进行解析,并使用serialize函数对其进行序列化。然后你可以反序列化它。

答案 2 :(得分:0)

这个函数/答案假设很多:主要是你的JavaScript"数组中只有两种类型的数据"将是整数和字符串,然而它产生了你证明PHP反序列化函数需要的输出类型。

var params = {};
params['showTitle'] = 0;
params['class'] = '';
params['ajax'] = 0;
params['ajaxDom'] = '';
params['what'] = 'defi';
params['color'] = 'dark';

function jsArrToPhpSerializedString( arrObj ) {
  var str_parts = ['', '', '}'],
      arrLen = 0,
      ret = '';

  for (var prop in arrObj) {
    var val = arrObj[prop];
    arrLen += 1;
    str_parts[1] += 's:' + prop.length + ':"' + prop + '";';
    if (typeof val == 'number') {
      str_parts[1] += 'i:' + val + ';';
    } else if (typeof arrObj[prop] == 'string') {
      val = (!val) ? '""' : '"' + val + '"';
      str_parts[1] += 's:' + arrObj[prop].length + ':' + val + ';';
    }
  }

  str_parts[0] = 'a:' + arrLen + ':{';
  ret = str_parts.join('');
  return ret;
}

console.log( jsArrToPhpSerializedString(params) );
// "a:6:{s:9:"showTitle";i:0;s:5:"class";s:0:"";s:4:"ajax";i:0;s:7:"ajaxDom";s:0:"";s:4:"what";s:4:"defi";s:5:"color";s:4:"dark";}"