【问题标题】:NULL character found in serialized string在序列化字符串中发现 NULL 字符
【发布时间】:2012-07-28 13:25:25
【问题描述】:

我无法unserialize() 回溯我serialize()'d 并保存到文本文件。我也不能复制粘贴字符串,它只复制 NULL 之前的数据,所以我无法在 PHP 中将其反序列化。

这是 Notepad++ 中的一小段内容

任何想法如何反序列化?

注意:我使用error_log($backtrace, 3, 'file.log'); 来保存文件,然后只需在记事本++ 中打开即可复制粘贴,但我无法复制 NULL 字符。

【问题讨论】:

  • 可能是由于 utf-8 和 ascii 冲突。确保文件和系统都使用相同的编码。
  • preg_replace() 有用吗? (我可能误解了这个问题)
  • 您是否将序列化的数据复制粘贴到文本编辑器中以保存它,或者您是否使用了 PHP 中的 fwrite() 之类的东西?
  • @Narf 我使用了 PHP 的 error_log 函数(编辑了我的帖子)
  • @IMB 对于序列化数据 - 通过fwrite()file_put_contents()

标签: php serialization deserialization


【解决方案1】:

因此,序列化函数使用语法 null*null 标识成员变量,正如您在此处显示的那样。

空字符在字符串中编码为\0,通常不会显示在输出中。要反序列化,您需要将那些“空”文本转换回\0

当我编写一个序列化数组时,我通过一个将\0 转换为[NULL] 的函数来运行它。

$string = str_replace("\0","[NULL]",$string);

然后当你准备好反序列化时,你可以做相反的事情

$string = str_replace("[NULL]","\0",$string);

【讨论】:

  • 只公开对象属性。
猜你喜欢
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
相关资源
最近更新 更多