我们在使用PHP序列化/非序列化时遇到了一个奇怪的问题。我们已经序列化并存储在mysql中的一个特定字符串中(UTF-8排序规则)。取消序列化时,它会返回错误。
字符串:
"Anoop做得很好,从杂志上剪下了以字母P开头的照片。“
DB中的序列化数据:
s:96:"Anoop做得很好,从杂志上剪出了以字母P开头的照片";
在取消序列化时,我们得到了这个错误Notice - unserialize (): Error at offset 2 of 101 bytes。我们注意到字符串长度是不同的。这个问题的原因是什么。
任何帮助都会很感激的。谢谢!
发布于 2014-01-29 10:58:55
您可能没有在连接中使用utf-8,或者PHP上下文不是utf-8?
尝试使用SQL:
SET CLIENT_ENCODING = utf8 在你得到你的数据之前。
试/核实:
ini_set ('default_charset' , 'UTF-8' );
setlocale (LC_ALL, 'de_DE.UTF-8'); # or what your favorit发布于 2014-01-28 13:08:49
你看到第二个字符串里有分号了吗?UTF-8并不总是使用一个字节,而是1到4个字节.
从数据库解码字符串时,确保输入在输入到数据库时使用正确的字符集进行编码。
我使用一个表单在DB中创建记录,其中有一个有效的JSON内容字段,但是它包含了卷曲撇号。如果带有窗体的页没有
然后,将数据以错误的编码方式发送到数据库。然后,当json_decode试图将字符串转换为对象时,每次都失败。
发布于 2014-01-29 03:38:48
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);这对我有用,你要试试这个。
https://stackoverflow.com/questions/21405021
复制相似问题