0

我试图了解 Wordpress 插件如何处理数据,当我从 MySQL 中提取它时,它会像这样:

a:1:{s:9:"home-team";a:6:{s:2:"id";s:9:"home-team";s:4:"slug";s:9:"home-team";s:4:"type";s:6:"select";s:4:"name";s:9:"Home Team";s:11:"description";s:0:"";s:4:"data";a:4:{s:7:"options";a:3:{s:60:"wpcf-fields-select-option-3892e2c3ad45e24dc7f47ff2ba880c33-2";a:2:{s:5:"title";s:13:"Chicago Bears";s:5:"value";s:1:"1";}s:60:"wpcf-fields-select-option-09fbd82bfa4142df6439c8e15d96dbfc-1";a:2:{s:5:"title";s:15:"New York Giants";s:5:"value";s:1:"2";}s:60:"wpcf-fields-select-option-7c7df972f933545b37c41ca249c686b4-1";a:2:{s:5:"title";s:15:"Oakland Raiders";s:5:"value";s:1:"3";}}s:8:"validate";a:1:{s:8:"required";a:3:{s:6:"active";s:1:"1";s:5:"value";s:4:"true";s:7:"message";s:22:"This Field is required";}}s:19:"conditional_display";a:2:{s:8:"relation";s:3:"AND";s:6:"custom";s:0:"";}s:16:"disabled_by_type";i:0;}}}

存储方式有名称吗?对我来说,它看起来有点像 JSON,但这当然不是 JavaScript。另外,有没有办法轻松清理它(通过使用在线工具),所以前几行看起来像这样:

a:1: {
  s:9:"home-team";
  a:6: {
    s:2:"id";
    s:9:"home-team";
    s:4:"slug";
    s:9:"home-team";
    s:4:"type";
    s:6:"select";
    s:4:"name";

等等……等等……等等……

4

2 回答 2

5

这就是 PHP 序列化格式。

请参阅: http: //php.net/manual/en/function.serialize.php

不知道如何获得与您所拥有的完全一样的格式化版本(但您可能很容易将它们放在一起),但这是另一种了解序列化字符串中内容的方法:

$test_string= 'a:1:{s:9:"home-team";a:6:{s:2:"id";s:9:"home-team";s:4:"slug";s:9:"home-team";s:4:"type";s:6:"select";s:4:"name";s:9:"Home Team";s:11:"description";s:0:"";s:4:"data";a:4:{s:7:"options";a:3:{s:60:"wpcf-fields-select-option-3892e2c3ad45e24dc7f47ff2ba880c33-2";a:2:{s:5:"title";s:13:"Chicago Bears";s:5:"value";s:1:"1";}s:60:"wpcf-fields-select-option-09fbd82bfa4142df6439c8e15d96dbfc-1";a:2:{s:5:"title";s:15:"New York Giants";s:5:"value";s:1:"2";}s:60:"wpcf-fields-select-option-7c7df972f933545b37c41ca249c686b4-1";a:2:{s:5:"title";s:15:"Oakland Raiders";s:5:"value";s:1:"3";}}s:8:"validate";a:1:{s:8:"required";a:3:{s:6:"active";s:1:"1";s:5:"value";s:4:"true";s:7:"message";s:22:"This Field is required";}}s:19:"conditional_display";a:2:{s:8:"relation";s:3:"AND";s:6:"custom";s:0:"";}s:16:"disabled_by_type";i:0;}}}';
$unser = unserialize( $test_string);
print_r ( $unser );

这将显示:

Array
(
    [home-team] => Array
        (
            [id] => home-team
            [slug] => home-team
            [type] => select
            [name] => Home Team
            [description] => 
            [data] => Array
                (
                    [options] => Array
                        (
                            [wpcf-fields-select-option-3892e2c3ad45e24dc7f47ff2ba880c33-2] => Array
                                (
                                    [title] => Chicago Bears
                                    [value] => 1
                                )

                            [wpcf-fields-select-option-09fbd82bfa4142df6439c8e15d96dbfc-1] => Array
                                (
                                    [title] => New York Giants
                                    [value] => 2
                                )

                            [wpcf-fields-select-option-7c7df972f933545b37c41ca249c686b4-1] => Array
                                (
                                    [title] => Oakland Raiders
                                    [value] => 3
                                )

                        )

                    [validate] => Array
                        (
                            [required] => Array
                                (
                                    [active] => 1
                                    [value] => true
                                    [message] => This Field is required
                                )

                        )

                    [conditional_display] => Array
                        (
                            [relation] => AND
                            [custom] => 
                        )

                    [disabled_by_type] => 0
                )

        )

)
于 2013-08-20T14:24:49.950 回答
1

这就是 WordPress 在数据库中存储数组和对象的方式。从文章WordPress 为您序列化选项和元

在最基本的用例中,序列化是一种直接在数据库中存储数组和对象的方式,它只能存储数字、文本和日期。序列化获取一个数组并将其转换为序列化字符串。例如:

$data = array( 'apple', 'banana', 'orange' );
echo serialize( $data );
// Result is a string we can unserialize into an array:
// a:3:{i:0;s:5:"apple";i:1;s:6:"banana";i:2;s:6:"orange";}

WordPress 有一些我们使用的辅助函数来代替serialize()and unserialize()maybe_serialize()and maybe_unserialize()。第一个只序列化需要序列化的数据——数组和对象——第二个只对已经序列化的数据进行反序列化。(我们有很多这样的方便的功能。)

您提到“当我从 MySQL 中提取它时,它会像这样”,因此您可能没有使用捆绑函数来提取数据,例如get_option()get_post_meta ()get_user_meta(). 这些函数负责反序列化数据。

值得注意的是,您应该使用像WordPress(和其他)搜索和替换工具这样的工具来搜索/替换数据库中的内容。因为它负责替换序列化数据中的字符串。

你不能简单地改变:

a:3:{i:0;s:5:"apple";i:1;s:6:"banana";i:2;s:6:"orange";}

a:3:{i:0;s:5:"grapefruit";i:1;s:6:"banana";i:2;s:6:"orange";}

因为它应该是s:10:"grapefruit";, 是 10 字符串中的字符数。

于 2013-08-20T17:55:03.167 回答