2014-01-21 33 views
0

我是一個PHP中的新人,我想反序列化Ruby在PHP中序列化YAML數據。如何在PHP中反序列化Ruby序列化的YAML數據?

哈希任何人做到了嗎?

Ruby代碼:

class CustomField < ActiveRecord::Base 
    serialize :possible_values 
end 

在Rails中,我使用的下面的代碼來從MySQL數據庫中檢索數據:

cf = CustomField.find(1).possible_values.to_s 

,我可以檢索結果:

[\"文字\", \"スタイル\", \"入力チェック\"] 

在cakephp中,檢索結果爲:

--- 
- !binary | 
    5paH5a2X 

- !binary | 
    44K544K/44Kk44Or 

- !binary | 
    5YWl5Yqb44OB44Kn44OD44Kv 
+0

您的意思是? http://www.php.net/manual/en/function.yaml-parse-file.php –

+1

[YAML是一個標準](http://www.yaml.org/)。 Ruby和PHP都有符合YAML的解析器/生成器。使用這些和你的數據應該正確地往返移動。如果你通過HTTP來移動它,你可能應該使用JSON,因爲它更加面向Web。 –

+0

@theTinMan:儘管YAML是標準化的,但你仍然可以在YAML中使用像「'---!ruby/object:Some :: Class \ n ...」這樣的非可移植廢話(尤其是如果你使用'serialize'這樣的惡意破解)。所以是的,JSON是一個更好的選擇。 –

回答

0

非常感謝大家。

我自己解決了。 在軌,如果你定義像下面

class CustomField < ActiveRecord::Base 
    serialize :possible_values 
end 

Rails會是系列化YAML和Base64編碼的數據保存到數據庫連載屬性。

所以,在PHP

首先,我分析,從數據庫中檢索數據YAML。

$base64_encoded_possible_values = yaml_parse($result[0]["CustomField"]["possible_values"]); 
/* 
    array 
    0 => 5paH5a2X, 
    1 => 44K544K/44Kk44Or 
    ... 
*/ 

在使用yaml_parse方法之前,您必須安裝yaml php extension

在我的情況下,我下載php_yaml.dll並將它放到C:\ xampp \ php \ ext中,然後將下面的代碼行添加到C:\ xampp \ php \ php.ini中。

extension=php_yaml.dll 

其次,解碼該值。

base64_decode($base64_encoded_possible_values[0]);//文字