- 浏览: 272583 次
- 性别:
- 来自: 海南海口
文章分类
最新评论
-
风尘之驿:
junbin007 写道61行。。莫非这是一种神奇的语法 是那 ...
PHP中批量更新数据表中多条记录 -
junbin007:
61行。。莫非这是一种神奇的语法
PHP中批量更新数据表中多条记录 -
junbin007:
39行,你懂的
PHP中批量更新数据表中多条记录 -
风尘之驿:
String line[] = new String[file ...
开启一个文本文件,一次读取其内的一行文本 -
whumartine:
String line[] = new String[file ...
开启一个文本文件,一次读取其内的一行文本
javascript中模仿php的serialize和unserialize序列化函数
- 博客分类:
- JavaScript
/* 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 <andot@ujn.edu.cn> * 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 * *2011-01-05 likefei edit without encoding *ser_string() *unser_string() * *gbk encoding *不同的编码中文的长度不同,需要调整一下函数 *chkLength(strTemp) */ 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); var utf8 = s;//当判断是中文时不进行编码转换 sb[p++] = 's:' + chkLength(utf8) + ':"'; 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)); //var s = ss.substring(p, p += l); var s = subChnStr(ss,l,p); p += s.length; 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 ; } 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(); } //gbk encoding下的中文字符长度 function chkLength(strTemp) { var i,sum; sum=0; for(i=0;i<strTemp.length;i++) { if ((strTemp.charCodeAt(i)>=0) && (strTemp.charCodeAt(i)<=255)) sum=sum+1; else sum=sum+2; } return sum; } //gbk encoding中文字符截取(中文占两个字符) //utf8 encoding中文字符截取(中文占三个字符) //做的改动:增加截取字符串的开始位置 function subChnStr(str, len, start, hasDot) { var newLength = 0; var newStr = ""; var chineseRegex = /[^\x00-\xff]/g; var singleChar = ""; var strLength = str.replace(chineseRegex,"**").length; for(var i = start;i < strLength;i++) { singleChar = str.charAt(i).toString(); if(singleChar.match(chineseRegex) != null) { newLength += 2; } else { newLength++; } if(newLength > len) { break; } newStr += singleChar; } if(hasDot && strLength > len) { newStr += "..."; } return newStr; }
发表评论
-
JS中统计字符串中的字符个数,一个中文等两个字符
2013-06-17 13:49 2099/** * 统计字符串中的字符个数,一个中文等两个字 ... -
IE浏览器中Image对象onload失效的解决办法
2013-02-01 17:11 866写了段代码: functio ... -
javascript 的回车触发事件函数及用法
2013-01-09 11:15 1147javascript 的回车触发事件函数和使用 ... -
JS 将整数转化为货币格式的函数
2012-11-01 15:43 880//将数字转为货币格式 function toMoeny(p ... -
Jquery订单列表的批量倒计时实现
2012-10-27 18:12 1414<script language="javas ... -
教你用js超简单实现页面自动控制图片的宽度和高度
2011-11-16 10:09 970在图片里加句简单的js轻松实现页面自动控制图片的宽高度, ... -
一个小小弹出层提示框
2011-08-10 15:02 1133一个小小弹出层提示框,弹出三秒后自动关闭,根据具体情况而定位置 ... -
javascript获取当前时间(年-月-日 时:分:秒)
2011-08-10 14:59 1806javascript获取当前时间(年-月-日 时:分:秒) ... -
javascript中的in_array()在数组中查找元素值
2011-08-04 11:33 1095in_array()的功能与php中的in_array()一致 ... -
Javascript--刷新页面的多种方法
2011-07-25 08:14 737Javascript刷新页面的几种方法: 1 hi ... -
正则表达式口诀及教程
2011-07-24 17:53 821正则很好用也很强大 ... -
做网站常用正则表达式
2011-07-24 17:50 916注意:在不同的 ... -
javascript保留小数点,四舍五入
2011-07-24 17:26 1435function returnFloat0(valu ... -
JavaScript 获取当前时间戳的方法
2011-07-24 17:24 2683在网上找了很久JS获取时间戳的方法,很多都走了 ... -
常用的JavaScript自定义函数大全
2011-07-24 17:19 921// JavaScript Document 常用的Java ...
相关推荐
在PHP中,序列化是将变量转换为可存储或传输的字符串的过程,而反序列化则是将该字符串恢复为原始变量。PHP提供了两种主要的序列化方法:`serialize()` 和 `unserialize()` 以及 `json_encode()` 和 `json_decode()`...
PHP提供了两种序列化和反序列化的机制,即使用serialize()和unserialize()函数进行PHP特有的序列化与反序列化,以及使用json_encode()和json_decode()函数进行JSON格式的序列化与反序列化。 首先,让我们来分析一下...
在这个“se_mouz_image.rar_serialize_序列化”的主题中,我们将深入探讨如何利用`serialize()`函数来序列化文档以及实现鼠标画图功能。 首先,我们来详细解释一下`serialize()`函数。`serialize()`是PHP内建的一个...
Serialize序列化后的数据可能包含函数、对象和闭包等PHP特有的信息,这些信息在不同PHP版本间可能会有兼容性问题,而且也可能不被其他语言所支持。相反,JSON格式更加标准化,更容易被不同的编程语言和平台所接受。 ...
在PHP中,经常使用的序列化方式包括了PHP原生的serialize以及更为通用的JSON格式化。以下是根据给定文件信息,对PHP的serialize序列化和JSON格式化数据分析的知识点进行详细说明。 首先,PHP的serialize函数的作用...
在PHP中,`serialize`和`unserialize`函数就是用来进行序列化和反序列化的。在前端开发领域,Vue.js是一个流行的轻量级渐进式JavaScript框架,它提供了构建用户界面的强大工具。现在,我们将深入探讨"serialized-...
本文将详细讲解PHP中实现序列化和反序列化的多种方法,包括serialize和unserialize、json_encode和json_decode、var_export和eval以及wddx_serialize_value和wddx_deserialize。 1. serialize和unserialize `...
本文将深入解析PHP中常见的序列化与反序列化方法。 1. `serialize` 和 `unserialize` 函数 `serialize` 是PHP内建的一个函数,用于将变量转换为一个字符串,该字符串可以被 `unserialize` 函数还原为原始的变量形式...
也就是说,“序列化”采用一种形式(或输入的集合)并为 HTTP 请求返回正确的序列化字符串,此插件中的函数采用该序列化字符串,然后执行以下两种可能的操作之一: 根据字符串中的值在表单中设置每个输入(包括...
3. **serialize**:这是PHP内置的序列化方法,可以将任何PHP变量转换为一个字符串,然后在需要的时候通过unserialize()函数还原。然而,相比于msgpack和json,serialize在时间和空间效率上相对较差,但在处理PHP特定...
`serialize()`和`unserialize()`是PHP中处理复杂数据结构的工具。`serialize()`将变量转化为可存储的字符串形式,而`unserialize()`能将这个字符串再转换回原生的PHP值。 `json_encode()`和`json_decode()`是PHP...
首先,`serialize`和`unserialize`是PHP内置的序列化和反序列化函数。`serialize`函数接受一个变量作为参数,将其转化为字符串,这个字符串包含了变量的所有信息,包括类型和结构。例如,当序列化一个数组时,输出的...
在PHP中,可以使用`serialize()`函数进行序列化操作,而`unserialize()`用于反序列化。序列化的字符串通常包含特殊字符和标识符,以便在反序列化时能正确解析数据结构。 序列化具有以下特点: 1. 包含对象的所有...
- `serialize()` 是PHP中最基础的序列化函数,它可以将任何变量(包括数组和对象)转换为字符串。例如,一个数组`$a`在序列化后会得到类似`a:3:{s:1:"a";s:5:"Apple";s:1:"b";s:6:"banana";s:1:"c";s:7:"Coconut";}...
3. `serialize()` 和 `unserialize()` 函数:`serialize()`可以将PHP值转换为可存储的字符串形式,而`unserialize()`则可以将该字符串反序列化回原始的PHP值。不过,这种方法通常用于存储和恢复变量,而不是简单的...
在PHP中,可能使用`serialize()`和`unserialize()`函数来序列化和反序列化购物车数据。同时,购物车系统也需要考虑安全性问题,防止SQL注入等攻击。 3. **登录系统**: 登录系统是网站安全的重要组成部分,主要...