PHP序列化/反序列化错误

时间:2014-01-28 11:56:20

标签: php mysql serialization utf-8

使用PHP序列化/反序列化时,我们遇到了一个奇怪的问题。我们已经序列化并存储在mysql中的特定字符串中(UTF-8整理)。反序列化时会返回错误。

例如: 字符串:

  

“Anoop很好地剪掉了杂志上的照片   以字母P.“

开头

DB中的序列化数据:

  

s:96:“Anoop在剪辑杂志上的照片方面做得很好   以字母P“开始;

在反序列化时,我们收到了此错误Notice - unserialize (): Error at offset 2 of 101 bytes。我们注意到字符串长度不同。这个问题的原因是什么。

任何帮助都会非常感激。谢谢!

3 个答案:

答案 0 :(得分:3)

您可能不在连接中使用utf-8,或者您的PHP上下文不是utf-8?

尝试使用SQL:

SET CLIENT_ENCODING = utf8 

因为你得到你的数据。

的try /验证:

ini_set ('default_charset' , 'UTF-8' );
setlocale (LC_ALL, 'de_DE.UTF-8'); # or what your favorit

答案 1 :(得分:1)

你知道第二个字符串中有分号吗? UTF-8不会一直使用一个字节,它是1到4个字节。

从数据库解码字符串时,请确保输入在输入数据库时​​使用正确的字符集进行编码。

我使用表单在数据库中创建记录,其内容字段是有效的JSON,但它包含了撇号。如果带有表单的页面没有

在头部

,然后使用错误的编码将数据发送到数据库。然后,当json_decode尝试将字符串转换为对象时,它每次都失败。

答案 2 :(得分:1)

PHP序列化/反序列化没有问题,

是这样的

$string = "Anoop did a great job cutting out pictures from the magazine that started with the letter P. ";
echo $string = serialize($string);
echo '<br>';
echo unserialize($string);

然后没有错误。

如果您指向unserialize字符串,则会显示与之前显示的错误相同的错误。

$string = "Anoop did a great job cutting out pictures from the magazine that started with the letter P. ";
//echo $string = serialize($string);
echo '<br>';
echo unserialize($string);

对我来说,你会尝试这个。