gpt4 book ai didi

php - Boolean和Integer是序列化后的字符串

转载 作者:可可西里 更新时间:2023-10-31 22:44:06 25 4
gpt4 key购买 nike

我正在使用 WordPress update_post_meta像这样保存一个数组

$obj = array(
'array' => array(1, 'zwei', !!3),
'string' => 'abc',
'bool' => true,
'bool2' => false,
'integer' => 1,
'integer2' => 17
);

update_post_meta($post_ID, 'my-key', $obj);

但是如果我检查我得到的原始字段

a:6:{s:5:"array";a:3:{i:0;i:1;i:1;s:4:"zwei";i:2;s:1:"1";}s:6:"string";s:3:"abc";s:4:"bool";s:1:"1";s:5:"bool2";s:1:"0";s:7:"integer";i:1;s:8:"integer2";i:17;}

应该是

a:6:{s:5:"array";a:3:{i:0;i:1;i:1;s:4:"zwei";i:2;b:1;}s:6:"string";s:3:"abc";s:4:"bool";b:1;s:5:"bool2";b:0;s:7:"integer";i:1;s:8:"integer2";i:17;}

您可能会注意到所有 boolean 值都存储为字符串 (b:1 = s:1:"1")

问题仅出现在某些 WordPress 安装上,而不是所有安装上。我还检查了 serialize正确工作的函数(返回 b:1)

同时使用 get_post_meta

get_post_meta($post_ID, 'my-key', true);

并使用 is_bool checkin 值返回 false(显然)

编辑:刚刚注意到整数也被保存为字符串

最佳答案

update_post_meta 使用 update_metadata 你可以找到它的代码 here在那个函数中,如果你看一下 at line 119你会看到 meta_value 被传递给了 wp_unslash其中返回值为字符串(改变数据类型的函数为stripslashes_deep)

作为解决方法,您可以 serialize传递给 update_post_meta() 之前的值

编辑:
发现问题:在 3.6.0 update_metadata 之前第 117 行有这段代码:

$meta_key = stripslashes($meta_key)

stripslashes是一个返回字符串的 php 函数。
从 3.6.0 开始,该行看起来像:

$meta_key = wp_unslash($meta_key);

哪个 stripslashes 只有字符串类型 meta_keys。

更新到 wordpress 3.6.0 或更高版本将解决此问题。

关于php - Boolean和Integer是序列化后的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19110631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com