反序列化有时会返回false

Ric*_*nop 5 php regex serialization

我在我的应用程序中有这个功能:

public function direct($theTree)
{
    $aTreeRoot = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $theTree);
    return unserialize($aTreeRoot);
}
Run Code Online (Sandbox Code Playgroud)

它应该永远不会返回false,但在错误日志中会出现错误,表示返回false.

但是,我无法在我的应用程序中复制错误.我正在尝试一切可能的方式,但它始终有效.

这个功能有问题吗?

$theTree来自会话.

编辑:正则表达式是因为:unserialize- 在评论中搜索我的正则表达式.它应该解决一个问题.

Poo*_*att 40

我之前遇到过类似的问题.我告诉你我是如何解决它的.

序列化数据后,应用base64_encode()例如

$txt = base64_encode(serialize($txt));
Run Code Online (Sandbox Code Playgroud)

当你反序列化它

例如

 $txt = unserialize(base64_decode($txt));
Run Code Online (Sandbox Code Playgroud)

试试这个 .希望也为你工作.祝好运

  • @Preexo base64将数据编码为ascii字符串,绕过从数据库到服务器脚本的字符集问题,如果从网络上抓取数据,则从源到数据库再回到脚本。翻译可能会出错。显然,“ serialize”和“ unserialize”并不总是编码为解码自身,因此人们对此有疑问。如果使用base64,则在查看数据库中的原始条目时会直接松散查看数据。 (2认同)