簡體   English   中英

如何將序列化數組傳遞給Symfony2 Command

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM