1
下面是代码:2个相同的字符串,一个在反序列化时给出错误,另一个没有。为什么?
<?php
$txt = 'a:1:{s:14:"exclude_stores";a:3:{i:0;s:7:"phoenix";i:1;s:8:"chandler";i:2;s:6:"tucson";}}' //serialized PHP array
$str = htmlspecialchars(urldecode($txt));
$str = preg_replace('/\<\?.*\?\>/ims', '', $str); //get rid of php tags/code enclosed in <? ... >
$str = preg_replace('/\>/ims', '>', $str); //change > back to >
?>
在这一点上,如果我这样做:
<?php
echo gettype($txt) . ' ' . $txt . '<br>';
echo gettype($str) . ' ' . $str;
?>
我得到:
string a:1:{s:14:"exclude_stores";a:3:{i:0;s:7:"phoenix";i:1;s:8:"chandler";i:2;s:6:"tucson";}}
string a:1:{s:14:"exclude_stores";a:3:{i:0;s:7:"phoenix";i:1;s:8:"chandler";i:2;s:6:"tucson";}}
琴弦似乎是完全一样的。然后,如果我这样做:
<?php
$u1 = unserialize($txt);
print_r($u1);
$u2 = unserialize($str);
print_r($u2);
?>
我得到: 阵列([exclude_stores] =>数组([0] =>凤[1] =>钱德勒[2] =>图森))
Notice: unserialize(): Error at offset 5 of 128 bytes in ...
有些事情正在发生$ str,反序列化不喜欢,但我无法弄清楚它是什么。屏幕上的字符串看起来完全一样,当我将它们粘贴到N ++中时,它们看起来完全一样。
我怀疑htmlspecialchars,urldecode或preg_replace正在对我看不到的文本做些什么。任何帮助表示赞赏。
问题解决了谢谢! – raphael75