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

Convert javascript array into a php unserializable string

本文关键字:序列化 字符串 php javascript 数组 转换      更新时间:2023-09-26

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

在我的javascript中,我有:

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

输出I真正需要得到的是:

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);

这应该很容易,但我被卡住了。。。非常感谢。

请查看您是否可以使用此

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

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

这个函数/answer假设了很多:主要是JavaScript"数组"中仅有的两种类型的数据将是整数和字符串,尽管它会产生PHP unserialize函数所需的输出类型。

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";}"