這裡的 YAML 標準版本似乎是 1.1 版,而不是(2009 年發布的 1.2 版),所以以下所有值:y、Y、yes、Yes、YES、n、N、no、No、NO、true、True、TRUE、false、False、FALSE、on、On、ON、off、Off、OFF 有時會被混淆地解釋為布林值。(PECL yaml >= 0.4.0)
yaml_parse — 解析 YAML 資料流
將全部或部分 YAML 文件資料流轉換為 PHP 變數。
範例 #1 yaml_parse() 範例
<?php
$yaml = <<<EOD
---
invoice: 34843
date: "2001-01-23"
bill-to: &id001
given: Chris
family: Dumars
address:
lines: |-
458 Walkman Dr.
Suite #292
city: Royal Oak
state: MI
postal: 48046
ship-to: *id001
product:
- sku: BL394D
quantity: 4
description: Basketball
price: 450
- sku: BL4438H
quantity: 1
description: Super Hoop
price: 2392
tax: 251.420000
total: 4443.520000
comments: Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338.
...
EOD;
$parsed = yaml_parse($yaml);
var_dump($parsed);
?>上述範例將輸出類似以下的內容
array(8) {
["invoice"]=>
int(34843)
["date"]=>
string(10) "2001-01-23"
["bill-to"]=>
&array(3) {
["given"]=>
string(5) "Chris"
["family"]=>
string(6) "Dumars"
["address"]=>
array(4) {
["lines"]=>
string(34) "458 Walkman Dr.
Suite #292"
["city"]=>
string(9) "Royal Oak"
["state"]=>
string(2) "MI"
["postal"]=>
int(48046)
}
}
["ship-to"]=>
&array(3) {
["given"]=>
string(5) "Chris"
["family"]=>
string(6) "Dumars"
["address"]=>
array(4) {
["lines"]=>
string(34) "458 Walkman Dr.
Suite #292"
["city"]=>
string(9) "Royal Oak"
["state"]=>
string(2) "MI"
["postal"]=>
int(48046)
}
}
["product"]=>
array(2) {
[0]=>
array(4) {
["sku"]=>
string(6) "BL394D"
["quantity"]=>
int(4)
["description"]=>
string(10) "Basketball"
["price"]=>
int(450)
}
[1]=>
array(4) {
["sku"]=>
string(7) "BL4438H"
["quantity"]=>
int(1)
["description"]=>
string(10) "Super Hoop"
["price"]=>
int(2392)
}
}
["tax"]=>
float(251.42)
["total"]=>
float(4443.52)
["comments"]=>
string(68) "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338."
}
如果針對使用 !php/object 標籤的節點啟用了 unserialize(),則使用 yaml_parse() 處理不受信任的使用者輸入是危險的。可以使用 yaml.decode_php ini 設定停用此行為。
這裡的 YAML 標準版本似乎是 1.1 版,而不是(2009 年發布的 1.2 版),所以以下所有值:y、Y、yes、Yes、YES、n、N、no、No、NO、true、True、TRUE、false、False、FALSE、on、On、ON、off、Off、OFF 有時會被混淆地解釋為布林值。解譯自訂標籤的簡單用法範例
<?php
$data=
"#yaml
---
data: !mytag bar test
...
";
function callback($value){
return str_replace('bar','baz',$value);
}
$cnt;
$array=yaml_parse($data,0,$cnt,array('!mytag'=>'callback'));
print_r($array['data']);
?>
輸出
陣列
(
[data] => baz test
)
注意,版本 1.0.1 中有一個相關的錯誤(請參閱追蹤器)當透過表單輸入字串時,我必須先在輸入上使用 utf8_decode,然後才能使用 yaml_parse,否則我會收到一個難以理解的錯誤訊息 --
警告:yaml_parse():解析期間遇到讀取錯誤:不允許控制字元(第 1 行,第 1 列)
-- 即使特殊字元隱藏在檔案深處。