反序列化不适用于多维数组

时间:2015-10-10 19:16:15

标签: php arrays serialization

所以我以前曾多次遇到过这个问题,但是我总是会使用 base64_encode / decode 解决这个问题,这样就可以让它立即运行。

但是,在这个应用程序中我不能使用,因为我需要能够查询这个字段,如果编码的话,我也不知道如何做到这一点。

请原谅我的无知,但有没有办法在不使用base64编码的情况下反序列化多维数组呢?

更新1

删除字符串并将其转换为整数可以解决问题。所以它是字符串的问题,或者我怀疑"造成问题。无论如何要解决这个问题?

对于此应用程序,数组的第二个元素表示将在其下搜索的格式的日期。理想情况下,我想保留原样,但如果有必要,我想我可以使用一个整数来表示距离常数的天数,然后解释该结果。

以下是代码:

// Load Contact from Database
$returnFields = array('_AttendanceRecords');
$Contact = $app->loadCon(39732,$returnFields);

echo "<pre>";
print_r($Contact);
echo "</pre>";

echo $Contact['_AttendanceRecords'] . "</br>";

// To unserialize...
$AttendanceRecordsLoad = unserialize($Contact['_AttendanceRecords']);

echo "<pre>";
print_r($AttendanceRecordsLoad);
echo "</pre>";

输出为:

  

阵列(       [_AttendanceRecords] =&gt;一个:1:{I:0;一个:;:1; I:1; S:10:&#34; 2015年10月9日&#34 ;; I:3:I 0:I {2; S:1 :&#34; 1&#34 ;;}})

     

一个:1:{I:0;一个:3:{I:0; I:1; I:1; S:10:&#34; 2015年10月9日&#34 ;; I:2; S:1:&#34; 1&#34 ;;}}

正如你所看到的,最终的print_r是空的,我相信无论出于什么原因它都会返回false。

更新2

因此,经过更多的摆弄,我制作了这个新代码:

代码

$ContactId = 39732;
$returnFields = array('_AttendanceRecords');
$Contact = $app->loadCon($ContactId,$returnFields);

echo $Contact['_AttendanceRecords'] . " - IS result </br>";
echo $str = 'a:1:{i:0;a:3:{i:0;i:0;i:1;s:8:"10-10-15";i:2;i:1;}}'; echo " - str result </br>";
// To unserialize...

$AttendanceRecordsLoad = unserialize($Contact['_AttendanceRecords']);
$AttendanceRecordsLoad1 = unserialize($str);

echo "IS<pre>";
print_r($AttendanceRecordsLoad);
echo "</pre>";

echo "str<pre>";
print_r($AttendanceRecordsLoad1);
echo "</pre>";

输出

  

一个:1:{I:0;一个:3:{I:0; I:0; I:1; S:8:&#34; 15年10月10日&#34 ;; I:2; i:1;}} - IS结果

     

一个:1:{I:0;一个:3:{I:0; I:0; I:1; S:8:&#34; 15年10月10日&#34 ;; I:2; i:1;}} - str result

     

IS

     

STR

     

阵列(       [0] =&gt;排列           (               [0] =&gt; 0               [1] =&gt; 15年10月10日               [2] =&gt; 1           )

     

我不明白。字符串看起来相同。然而,如果数据库包含字符串,那么来自数据库的结果将不会反序列化。

这对任何人都有意义吗?

更新3

好的,所以现在我使用了var_dump而不是echo,我得到了这个输出:

输出

  

string(61)&#34; a:1:{i:0; a:3:{i:0; i:0; i:1; s:8:&#34; 10-10-15& #34 ;; I:2; I:1;}}&#34; - 是的   结果

     

string(51)&#34; a:1:{i:0; a:3:{i:0; i:0; i:1; s:8:&#34; 10-10-15& #34 ;; I:2; I:1;}}&#34; - str结果

显然他们并不完全相同。但我之前尝试过修剪,现在,它并没有删除任何隐藏的额外字符,这些字符以某种方式已经存放到此字符串中。

这是什么意思,我该如何纠正?

1 个答案:

答案 0 :(得分:0)

好看,看看这个问题: SOLUTION FOUND - Same strings, but var_dump() says one is 5 characters longer

修复程序在数据库返回的结果上使用了这个:

html_entity_decode($string], ENT_QUOTES)

希望能帮助别人。