【问题标题】:PHP serialize/unserialize errorPHP序列化/反序列化错误
【发布时间】:2014-02-19 17:13:35
【问题描述】:

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

例如: 字符串:

“Anoop 很好地从杂志上剪下了那些 以字母 P 开头。"

数据库中的序列化数据:

s:96:“Anoop 很好地从杂志上剪下图片 以字母 P 开头。";

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

任何帮助将不胜感激。谢谢!

【问题讨论】:

标签: php mysql serialization utf-8


【解决方案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);

它对我有用,你可以试试这个。

【讨论】:

    【解决方案2】:

    您的连接中可能没有使用 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
    

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-02
        • 1970-01-01
        相关资源
        最近更新 更多