您的$this->text 是在PHP 数组上运行serialize() 的结果,大概是将其存储在表列中。因此,它必须是 unserialized() 返回 PHP 数组,然后才能将其用作 PHP 数组。
但是,当我尝试原始序列化中似乎也存在错误时,$this->text 已损坏且无法使用。
从您的问题中复制了您的序列化字符串后,尝试反序列化时出现此错误
$x = 'a:2:{i:0;a:2:{s:5:"value";s:2:"de";s:5:"label";s:70:"<img src="assets/images/e/de-02d3d6ee.jpg" width="40" height="28" alt="">";}i:1;a:2:{s:5:"value";s:2:"en";s:5:"label";s:70:"<img src="assets/images/7/en-c5c09767.jpg" width="40" height="28" alt="">";}}';
$y = unserialize($x);
print_r($y);
注意:unserialize(): 第 4 行 D:\PHP-SOURCE\tst.php 中 256 个字节的偏移 123 处出错
这是因为这部分字符串,
s:70:"<img src="assets/images/e/de-02d3d6ee.jpg" width="40" height="28" alt="">"
没有正确计算后面的字符串,因为字符串中有 74 个字符
"<img src="assets/images/e/de-02d3d6ee.jpg" width="40" height="28" alt="">"
如果我们像这样通过将计数更正为74 来解决这个问题
s:74:"<img src="assets/images/e/de-02d3d6ee.jpg" width="40" height="28" alt="">"
然后重新运行反序列化
$x = 'a:2:{i:0;a:2:{s:5:"value";s:2:"de";s:5:"label";s:74:"<img src="assets/images/e/de-02d3d6ee.jpg" width="40" height="28" alt="">";}i:1;a:2:{s:5:"value";s:2:"en";s:5:"label";s:70:"<img src="assets/images/7/en-c5c09767.jpg" width="40" height="28" alt="">";}}';
$y = unserialize($x);
print_r($y);
字符串计数中还有另一个类似的错误
注意:unserialize(): 第 8 行 D:\PHP-SOURCE\tst.php 中 256 个字节的偏移 248 处出错
s:70:"<img src="assets/images/7/en-c5c09767.jpg" width="40" height="28" alt="">"
因此,如果我们也通过计数 74 并重新运行来修复该错误
$x = 'a:2:{i:0;a:2:{s:5:"value";s:2:"de";s:5:"label";s:74:"<img src="assets/images/e/de-02d3d6ee.jpg" width="40" height="28" alt="">";}i:1;a:2:{s:5:"value";s:2:"en";s:5:"label";s:74:"<img src="assets/images/7/en-c5c09767.jpg" width="40" height="28" alt="">";}}';
$y = unserialize($x);
print_r($y);
我们得到一个像这样正确反序列化的数组
Array
(
[0] => Array
(
[value] => de
[label] => <img src="assets/images/e/de-02d3d6ee.jpg" width="40" height="28" alt="">
)
[1] => Array
(
[value] => en
[label] => <img src="assets/images/7/en-c5c09767.jpg" width="40" height="28" alt="">
)
)
因此,简而言之,如果您从数据库中获取此数据,您需要先查看序列化此数据的代码,然后再将其放入数据库中,以了解为什么它错误地序列化首先是数组。