处理序列化数据时,可能会遇到错误,指出“unserialize() [function.unserialize]:偏移处错误。”此错误通常是由于字节计数长度错误导致序列化数据无效而发生。
在序列化过程中,PHP 使用 strlen( 计算序列化数组中每个元素的长度) 功能。但是,如果数据包含需要特殊处理(例如转义)的字符(例如双引号),则字节计数可能会变得不正确。
要解决此错误,方法是需要手动重新计算序列化数组中每个元素的长度:
$data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data);
除了快速修复之外,找出错误序列化的原因也很重要。请考虑以下步骤:
$toDatabase = base64_encode(serialize($data)); // Save to database $fromDatabase = unserialize(base64_decode($data)); //Getting saved format
虽然错误消息提供了问题的一般指示,但它通常有助于为此,请使用 findSerializeError 函数,该函数会比较两个序列化字符串并识别它们之间的差异,包括不正确的字节。计数:
function findSerializeError($data1) { echo "<pre class="brush:php;toolbar:false">"; $data2 = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data1); // ... }
通过提供有关错误的详细信息,此函数有助于识别和解决序列化问题。
以上是如何修复 PHP 序列化字符串中的'unserialize():偏移错误”?的详细内容。更多信息请关注PHP中文网其他相关文章!