使用PHP序列化/反序列化时,我们遇到了一个奇怪的问题。我们已经序列化并存储在mysql中的特定字符串中(UTF-8整理)。反序列化时会返回错误。
例如: 字符串:
“Anoop很好地剪掉了杂志上的照片 以字母P.“
开头
DB中的序列化数据:
s:96:“Anoop在剪辑杂志上的照片方面做得很好 以字母P“开始;
在反序列化时,我们收到了此错误Notice - unserialize (): Error at offset 2 of 101 bytes
。我们注意到字符串长度不同。这个问题的原因是什么。
任何帮助都会非常感激。谢谢!
答案 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)
从数据库解码字符串时,请确保输入在输入数据库时使用正确的字符集进行编码。
我使用表单在数据库中创建记录,其内容字段是有效的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);
对我来说,你会尝试这个。