[英]How to pass a serialized array to Symfony2 Command
我创建了一个带有一个参数的symfony2命令。 这个参数是serialize($ array)函数的结果。
但是,在命令中我无法取消序列化()收到的参数,我总是遇到错误:
Notice: unserialize(): Error at offset 5 of 48 bytes in ...
这是我想要发送给命令的数组的示例:
$array = array('key1' => '$value1', 'key2' => '$value2')
当我序列化数组(serialize($ array))时,这是结果:
a:2:{s:4:"key1";s:7:"$value1";s:4:"key2";s:7:"$value2";}
我在想:可能问题是由于字符串中的双引号(记住,是作为参数发送到命令),然后,我应用addslashes函数:
addslashes(serialize($array))
这是结果:
a:2:{s:4:\"key1\";s:7:\"$value1\";s:4:\"key2\";s:7:\"$value2\";}
但是当我尝试在命令execute()函数内反序列化字符串时,我仍然收到相同的错误。
任何想法?
解决了!!! 问题在于操作系统命令行和双引号。 有一种方法可以序列化数组并避免使用双引号作为命令:encoding base64。
解决方案是对序列化数组进行编码:
$serialized = serialize(array('key1' => 'value1', 'key2' => 'value2'));
//$serialized => a:2:{s:4:"key1";s:6:"value1";s:4:"key2";s:6:"value2";}
$base64 = base64_encode($serialize);
//$base64 => YToyOntzOjQ6ImtleTEiO3M6NjoidmFsdWUxIjtzOjQ6ImtleTIiO3M6NjoidmFsdWUyIjt9
正如你所看到的,$ base64中没有引号(这是base64_encode()的目标之一)然后,你可以用base64_decode轻松解码字符串
$serialized = base64_decode($base64);
//$serialized => a:2:{s:4:"key1";s:6:"value1";s:4:"key2";s:6:"value2";}
$array = unserialize($serialized);
//$array => array('key1' => 'value1', 'key2' => 'value2')
我希望这有助于某人
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.