无法反序列化完整字符串

Ben

简介和代码

我将聊天记录的内容存储在.txt文件中。内容如下:

a:3:{s:6:"author";s:5:"e297f";s:7:"message";s:4:"test";s:4:"time";s:8:"14:15:54";}a:3:{s:6:"author";s:5:"e297f";s:7:"message";s:6:"test 2";s:4:"time";s:8:"14:16:55";}a:3:{s:6:"author";s:5:"e297f";s:7:"message";s:6:"test 3";s:4:"time";s:8:"14:17:59";}

jQuery函数调出页面chatretrieve.php以收集此文件的内容。PHP文件如下所示:

<?php

session_start();

$data = unserialize(file_get_contents('../sessions/chats/log_'.$_SESSION['chatCode'].'.txt'));

#exit(print_r($data));

$content = '';

for($i = 0; $i < count( $data ); $i++){
    $content.='<div class="msgln">';
        $content.='<div class="meta">';
            $content.='<span class="name">'.$data[$i]['author'].'</span>';
            $content.='<span class="time">'.$data[$i]['time'].'</span>';
        $content.='</div>';
        $content.='<div class="msg">'.stripslashes(htmlspecialchars($data[$i]['message'])).'</div>';
    $content.='</div>';

}

return $content;

jQuery函数的相关部分如下:

$.post('inc/chatretrieve.php').done(function(data) {
    console.log(data);
});

问题

当我注释掉exit(print_r($data))PHP页面一部分时,控制台返回文件中的第一个数组变量.txt

Array
(
    [author] => e297f
    [message] => test
    [time] => 14:15:54
)
1

由于.txt文件中包含三则消息(并通过file_get_contents()函数检索),为什么在使用unserialize()函数时只能看到第一行

吉姆

问题是您的序列化数据无效:

'a:3:{s:6:"author";s:5:"e297f";s:7:"message";s:4:"test";s:4:"time";s:8:"14:15:54";}a:3:{s:6:"author";s:5:"e297f";s:7:"message";s:6:"test 2";s:4:"time";s:8:"14:16:55";}a:3:{s:6:"author";s:5:"e297f";s:7:"message";s:6:"test 3";s:4:"time";s:8:"14:17:59";}

因为这是三个数组,所以不清楚如何对其进行反序列化(令我惊讶的是,PHP并没有完全失败,而是返回了第一个对象)。

您将需要将其存储为序列化数组,或者找到一种方法将文件拆分为每个消息的部分-可能需要在换行符或类似内容上进行。

例如

<?php
//Note the added newlines.
$sez = 'a:3:{s:6:"author";s:5:"e297f";s:7:"message";s:4:"test";s:4:"time";s:8:"14:15:54";}
a:3:{s:6:"author";s:5:"e297f";s:7:"message";s:6:"test 2";s:4:"time";s:8:"14:16:55";}
a:3:{s:6:"author";s:5:"e297f";s:7:"message";s:6:"test 3";s:4:"time";s:8:"14:17:59";}';


foreach(explode("\n",$sez) as $line){
    $data = unserialize($line);
    print_r($data);
}

此处的示例http://codepad.org/sq1SbhIz

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法反序列化完整字符串

来自分类Dev

反序列化字符串

来自分类Dev

反序列化字符串化的JSON对象

来自分类Dev

根据类型反序列化json字符串

来自分类Dev

使用ServiceStack反序列化字符串

来自分类Dev

反序列化对象为纯字符串

来自分类Dev

如何反序列化XML字符串片段?

来自分类Dev

反序列化字符串不转换数组

来自分类Dev

反序列化JSON字符串嵌套字典

来自分类Dev

在Android中反序列化JSON字符串

来自分类Dev

如何反序列化JSON字符串以枚举

来自分类Dev

反序列化json表单字符串

来自分类Dev

反序列化json字符串

来自分类Dev

简单的字符串反序列化问题

来自分类Dev

反序列化复杂的动态JSON字符串

来自分类Dev

使用ServiceStack反序列化字符串

来自分类Dev

反序列化Google Financial JSON字符串

来自分类Dev

Xml 反序列化丢失的字符串

来自分类Dev

我如何从字符串反序列化 xml

来自分类Dev

谷类-无法反序列化json字符串-未处理的异常

来自分类Dev

无法从MongoDb C#中的BsonType ObjectId反序列化字符串

来自分类Dev

无法使用Newtonsoft.Json.JsonConvert.DeserializeObject反序列化xml字符串

来自分类Dev

当响应为原始字符串时,无法反序列化Restsharp响应

来自分类Dev

谷类-无法反序列化json字符串-未处理的异常

来自分类Dev

无法在C#中反序列化JSON结果。输入字符串格式错误

来自分类Dev

JSON字符串无法使用boolean和string正确反序列化

来自分类Dev

WebAPI将反序列化映射空字符串反序列化为“ null”

来自分类Dev

无法反序列化为字符串

来自分类Dev

PHP:通过反序列化序列化字符串来制作数组