gpt4 book ai didi

php - 如何修复由于单引号前删除斜杠而损坏的序列化字符串?

转载 作者:行者123 更新时间:2023-12-03 19:00:42 27 4
gpt4 key购买 nike

我在尝试反序列化数据时遇到错误。出现以下错误:

unserialize(): Error at offset 46 of 151 bytes

这是序列化的数据:

s:151:"a:1:{i:0;a:4:{s:4:"name";s:15:"Chloe O'Gorman";s:6:"gender";s:6:"female";s:3:"age";s:3:"3_6";s:7:"present";s:34:"Something from Frozen or a jigsaw ";}}";

错误是由数据中的单引号引起的。当我正在使用的网站和数据库已经上线时,我该如何缓解这个问题?

很遗憾,我无法重写负责序列化数据并将数据插入数据库的代码。这个问题很可能在整个数据库中多次出现。

有没有可以用来转义数据的函数?

最佳答案

经过进一步研究,我找到了解决方案。根据this blog post :

"It turns out that if there's a ", ', :, or ; in any of the array values the serialization gets corrupted."

如果我在一个尚未上线的网站上工作,预防方法是在将序列化数据存储到数据库之前对其进行 base64_encode:

base64_encode( serialize( $my_data ) );

然后:

unserialize( base64_decode( $encoded_serialized_string ) );

在检索数据时。

但是,由于我无法更改已存储在数据库中的内容, this very helpful post (原始帖子不再可用,但看起来像 this )提供了解决该问题的解决方案:

$fixed_serialized_data = preg_replace_callback ( '!s:(\d+):"(.*?)";!', function($match) {
return ($match[1] == strlen($match[2])) ? $match[0] : 's:' . strlen($match[2]) . ':"' . $match[2] . '";';
}, $my_data );

$result = unserialize( $fixed_serialized_data );

关于php - 如何修复由于单引号前删除斜杠而损坏的序列化字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26915524/

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