下载: phpserializer.js/* phpserializer.js - JavaScript to PHP serialize / unserialize class.

*

* This class is designed to convert php variables to javascript

* and javascript variables to php with a php serialize unserialize

* compatible way.

*

* Copyright (C) 2006 Ma Bingyao

* Version: 3.0c

* LastModified: Jun 2, 2006

* This library is free.  You can redistribute it and/or modify it.

*http://www.coolcode.cn/?p=171*/

function serialize(o) {

var p = 0, sb = [], ht = [], hv = 1;

function classname(o) {

if (typeof(o) == "undefined" || typeof(o.constructor) == "undefined") return '';

var c = o.constructor.toString();

c = utf16to8(c.substr(0, c.indexOf('(')).replace(/(^/s*function/s*)|(/s*$)/ig, ''));

return ((c == '') ? 'Object' : c);

}

function is_int(n) {

var s = n.toString(), l = s.length;

if (l > 11) return false;

for (var i = (s.charAt(0) == '-') ? 1 : 0; i < l; i++) {

switch (s.charAt(i)) {

case '0':

case '1':

case '2':

case '3':

case '4':

case '5':

case '6':

case '7':

case '8':

case '9': break;

default : return false;

}

}

return !(n < -2147483648 || n > 2147483647);

}

function in_ht(o) {

for (k in ht) if (ht[k] === o) return k;

return false;

}

function ser_null() {

sb[p++] = 'N;';

}

function ser_boolean(b) {

sb[p++] = (b ? 'b:1;' : 'b:0;');

}

function ser_integer(i) {

sb[p++] = 'i:' + i + ';';

}

function ser_double(d) {

if (d == Number.POSITIVE_INFINITY) d = 'INF';

else if (d == Number.NEGATIVE_INFINITY) d = '-INF';

sb[p++] = 'd:' + d + ';';

}

function ser_string(s) {

var utf8 = utf16to8(s);

sb[p++] = 's:' + utf8.length + ':"';

sb[p++] = utf8;

sb[p++] = '";';

}

function ser_array(a) {

sb[p++] = 'a:';

var lp = p;

sb[p++] = 0;

sb[p++] = ':{';

for (var k in a) {

if (typeof(a[k]) != 'function') {

is_int(k) ? ser_integer(k) : ser_string(k);

__serialize(a[k]);

sb[lp]++;

}

}

sb[p++] = '}';

}

function ser_object(o) {

var cn = classname(o);

if (cn == '') ser_null();

else if (typeof(o.serialize) != 'function') {

sb[p++] = 'O:' + cn.length + ':"';

sb[p++] = cn;

sb[p++] = '":';

var lp = p;

sb[p++] = 0;

sb[p++] = ':{';

if (typeof(o.__sleep) == 'function') {

var a = o.__sleep();

for (var kk in a) {

ser_string(a[kk]);

__serialize(o[a[kk]]);

sb[lp]++;

}

}

else {

for (var k in o) {

if (typeof(o[k]) != 'function') {

ser_string(k);

__serialize(o[k]);

sb[lp]++;

}

}

}

sb[p++] = '}';

}

else {

var cs = o.serialize();

sb[p++] = 'C:' + cn.length + ':"';

sb[p++] = cn;

sb[p++] = '":' + cs.length + ':{';

sb[p++] = cs;

sb[p++] = "}";

}

}

function ser_pointref(R) {

sb[p++] = "R:" + R + ";";

}

function ser_ref(r) {

sb[p++] = "r:" + r + ";";

}

function __serialize(o) {

if (o == null || o.constructor == Function) {

hv++;

ser_null();

}

else switch (o.constructor) {

case Boolean: {

hv++;

ser_boolean(o);

break;

}

case Number: {

hv++;

is_int(o) ? ser_integer(o) : ser_double(o);

break;

}

case String: {

hv++;

ser_string(o);

break;

}

case Array: {

var r = in_ht(o);

if (r) {

ser_pointref(r);

}

else {

ht[hv++] = o;

ser_array(o);

}

break;

}

default: {

var r = in_ht(o);

if (r) {

hv++;

ser_ref(r);

}

else {

ht[hv++] = o;

ser_object(o);

}

break;

}

}

}

__serialize(o);

return sb.join('');

}

function unserialize(ss) {

var p = 0, ht = [], hv = 1; r = null;

function unser_null() {

p++;

return null;

}

function unser_boolean() {

p++;

var b = (ss.charAt(p++) == '1');

p++;

return b;

}

function unser_integer() {

p++;

var i = parseInt(ss.substring(p, p = ss.indexOf(';', p)));

p++;

return i;

}

function unser_double() {

p++;

var d = ss.substring(p, p = ss.indexOf(';', p));

switch (d) {

case 'INF': d = Number.POSITIVE_INFINITY; break;

case '-INF': d = Number.NEGATIVE_INFINITY; break;

default: d = parseFloat(d);

}

p++;

return d;

}

function unser_string() {

p++;

var l = parseInt(ss.substring(p, p = ss.indexOf(':', p)));

p += 2;

var s = utf8to16(ss.substring(p, p += l));

p += 2;

return s;

}

function unser_array() {

p++;

var n = parseInt(ss.substring(p, p = ss.indexOf(':', p)));

p += 2;

var a = [];

ht[hv++] = a;

for (var i = 0; i < n; i++) {

var k;

switch (ss.charAt(p++)) {

case 'i': k = unser_integer(); break;

case 's': k = unser_string(); break;

case 'U': k = unser_unicode_string(); break;

default: return false;

}

a[k] = __unserialize();

}

p++;

return a;

}

function unser_object() {

p++;

var l = parseInt(ss.substring(p, p = ss.indexOf(':', p)));

p += 2;

var cn = utf8to16(ss.substring(p, p += l));

p += 2;

var n = parseInt(ss.substring(p, p = ss.indexOf(':', p)));

p += 2;

if (eval(['typeof(', cn, ') == "undefined"'].join(''))) {

eval(['function ', cn, '(){}'].join(''));

}

var o = eval(['new ', cn, '()'].join(''));

ht[hv++] = o;

for (var i = 0; i < n; i++) {

var k;

switch (ss.charAt(p++)) {

case 's': k = unser_string(); break;

case 'U': k = unser_unicode_string(); break;

default: return false;

}

if (k.charAt(0) == '/0') {

k = k.substring(k.indexOf('/0', 1) + 1, k.length);

}

o[k] = __unserialize();

}

p++;

if (typeof(o.__wakeup) == 'function') o.__wakeup();

return o;

}

function unser_custom_object() {

p++;

var l = parseInt(ss.substring(p, p = ss.indexOf(':', p)));

p += 2;

var cn = utf8to16(ss.substring(p, p += l));

p += 2;

var n = parseInt(ss.substring(p, p = ss.indexOf(':', p)));

p += 2;

if (eval(['typeof(', cn, ') == "undefined"'].join(''))) {

eval(['function ', cn, '(){}'].join(''));

}

var o = eval(['new ', cn, '()'].join(''));

ht[hv++] = o;

if (typeof(o.unserialize) != 'function') p += n;

else o.unserialize(ss.substring(p, p += n));

p++;

return o;

}

function unser_unicode_string() {

p++;

var l = parseInt(ss.substring(p, p = ss.indexOf(':', p)));

p += 2;

var sb = [];

for (i = 0; i < l; i++) {

if ((sb[i] = ss.charAt(p++)) == '//') {

sb[i] = String.fromCharCode(parseInt(ss.substring(p, p += 4), 16));

}

}

p += 2;

return sb.join('');

}

function unser_ref() {

p++;

var r = parseInt(ss.substring(p, p = ss.indexOf(';', p)));

p++;

return ht[r];

}

function __unserialize() {

switch (ss.charAt(p++)) {

case 'N': return ht[hv++] = unser_null();

case 'b': return ht[hv++] = unser_boolean();

case 'i': return ht[hv++] = unser_integer();

case 'd': return ht[hv++] = unser_double();

case 's': return ht[hv++] = unser_string();

case 'U': return ht[hv++] = unser_unicode_string();

case 'r': return ht[hv++] = unser_ref();

case 'a': return unser_array();

case 'O': return unser_object();

case 'C': return unser_custom_object();

case 'R': return unser_ref();

default: return false;

}

}

return __unserialize();

}

测试页面:http://test.coolcode.cn/phpserializer

js serialize php 解,[转]JavaScript 版本的 PHP serialize/unserialize 完整实现相关推荐

  1. php unhtml包,JavaScript 版本的 PHP serialize/unse_js

    以前写 PHPRPC 实现时,JavaScript 版本的序列化实现是修改自 http://www.devpro.it/code/102.html 的,这个实现虽然目前仍然在更新,不过它并没有完全实现 ...

  2. SAP UI5 应用开发教程之四十 - 如何制作包含了 component-preload.js 在内的 SAP UI5 发布版本

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  3. Node.js npm 详解

    一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...

  4. Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(一)

    Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(一) 本文目录: 一.[旋转的精灵女孩]案例运行效果 二.Three.js简介 三.Three.js代码正常运行显示条件 (1)不载入 ...

  5. js进阶 14-8 表单序列化函数serializeArray()和serialize()的区别是什么

    js进阶 14-8 表单序列化函数serializeArray()和serialize()的区别是什么 一.总结 一句话总结:两者都是对表单进行序列化,serializeArray()返回的是json ...

  6. 向别人网页注入js_区块链研究实验室 | Web3 .js基于以太坊的Javascript API

    web3.js是一个库集合,你可以使用HTTP或IPC连接本地或远程以太它节点进行交互. web3的JavaScript库能够与以太坊区块链交互. 它可以检索用户帐户,发送交易,与智能合约交互等. V ...

  7. Node.js 入门详解(一)

    目录 前言 1. 初识 Node.js 1.1 回顾与思考 1.2 Node.js 简介 1.2.1 什么是Node.js 1.2.2 Node.js 中的 JavaScript 运行环境 1.2.3 ...

  8. Python爬虫JS解密详解,学会直接破解80%的网站(一)!!!

    文章目录 1.网页查看 2.有道翻译简单实现源码 3.JS解密(详解) 4.python实现JS解密后的完整代码 4.1.实现效果 5.JS解密后完整代码升级版 5.1.实现效果 CSDN独家福利降临 ...

  9. js如何判断IE浏览器的版本包括IE11

    js如何判断IE浏览器的版本包括IE11: 获取IE浏览器的版本在以前非常的好操作,但是由于IE11浏览器的出现,导致很多以前常用的方法已经无能为力,下面就介绍一下如何判断IE浏览器的版本,并且能够兼 ...

最新文章

  1. 生成对抗网络(GAN)
  2. 学习鸟哥的Linux私房菜笔记(5)——目录
  3. SeqGAN——对抗思想与增强学习的碰撞
  4. 使用LXE_SP_CHECKSPELLING_MS进行ABAP文本拼写检查
  5. 工作189:配置表头即可
  6. webbrowser 检测ajax,控制台获取网页AJAX的返回数据,用的WebBroWser
  7. 拼多多就知乎不当评论致歉;谷歌员工成立首个工会;MySQL 迁移工具新版发布
  8. 脚本都不写,不能算正式测试
  9. java 软考_关于软考
  10. ps手柄震动测试软件,PS3 可实现震动 用PS3手柄连接电脑图文教程 - 电玩巴士
  11. html加减乘除除数不能为零,0不能做除数(数学中0为什么不能做除数)
  12. 【VR】(四)VR设备盘点
  13. 正则表达网络三剑客之sed
  14. Docker学习——docker入门
  15. 寒门如何出贵子(摘抄)
  16. NFS和NAS的关系
  17. Java项目:电器商城系统(java+SSM+JSP+jQuery+javascript+Mysql)
  18. 4 步搞定 Hive 增量更新
  19. ST(StoryTest)简单了解
  20. 如何建设商城网站?这几个方面入手

热门文章

  1. 雷军宣布红米 Redmi 品牌独立,这对小米意味着什么?
  2. 修改UITextField中的placeholder的字体
  3. 中国移动IM-飞信-0802上线新版本 试用手记
  4. Android布局属性详解之RelativeLayout
  5. smarty二维foreach示例[顺代一维数组],再次加强版
  6. leetcode216. 组合总和 III(回溯)
  7. c语言 二进制压缩算法_使用C ++解释的二进制搜索算法
  8. 网页缩放与窗口缩放_功能缩放—不同的Scikit-Learn缩放器的效果:深入研究
  9. robot:List变量的使用注意点
  10. NSLog打印当前文件,当前函数,当前行数