首页 > php学习 > php的序列化函数
2017
01-06

php的序列化函数

PHP序列化功能是转换生成一个可存储的字符串,此字符串包含了表示$value的字节流,可以存储于任何地方。这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。

string serialize(mixed $value),可处理除了resource(资源句柄)之外的任何类型。

想要将已序列化的字符串变回PHP的值,可使用unserialize()。

如何序列化成json格式呢

json_encode(mixed $value [, int $options = 0 [, int $depth = 512 ]])

把除了resource类型之外的数据类型编码为json格式,所有字符串数据的编码必须是UTF-8。
depth:设置最大递归深度。必须大于0。
options
    JSON_HEX_TAG:1,所有的<和>转换成\u003C和\u003E
    JSON_HEX_AMP:2,所有的&转换成\u0026
    JSON_HEX_APOS:4,所有的单引号(')转换成 \u0027
    JSON_HEX_QUOT:8,所有的双引号(")转换成\u0022
    JSON_FORCE_OBJECT:16,使一个非关联数组输出一个类(Object)而非数组。 在数组为空而接受者需要一个类(Object)的时候尤其有用。
    JSON_NUMERIC_CHECK:32,将所有数字字符串编码成数字(numbers)
    JSON_UNESCAPED_SLASHES:64,不要编码反斜杠(/)
    JSON_PRETTY_PRINT:128,用空白字符格式化返回的数据
    JSON_UNESCAPED_UNICODE:256,以字面编码多字节Unicode字符(默认是编码成 \uXXXX)

json_decode(string $json [,bool $assoc=FALSE [, int $depth = 512 [, int $options = 0 ]]])

把json字符串解析为php数据类型
assoc为TRUE时,将返回array而非object
depth:指定递归深度。
options
    JSON_OBJECT_AS_ARRAY:1,将json解析为数组而非object
    JSON_BIGINT_AS_STRING:2,将大数字编码成原始字符原来的值

json_decode要求的字符串($json参数)比较严格,否则返回NULL:
    (1)使用UTF-8编码
    (2)不能在最后元素有逗号
    (3)不能使用单引号
    (4)不能有\r,\t和BOM头,如果有请替换
UTF-8以字节为编码单元因此不需要 BOM 来表明字节顺序,但可以用 BOM 来表明编码方式。字符 "Zero Width No-Break Space" 的 UTF-8 编码是 EF BB BF。所以如果接收者收到以 EF BB BF 开头的字节流,就知道这是 UTF-8编码了。
去除BOM头方法一:
chr(239) . chr(187) . chr(191)拼接成utf-8 bom头,再使用trim函数即可
    trim($info,chr(239).chr(187).chr(191))
去除BOM头方法二:
匹配是否存在bom头,存在则截掉前三位字符
    if(preg_match('/^\xEF\xBB\xBF/',$json_data)){
        $json_data = substr($info,3);
    }
最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。