2012-02-08 75 views
3

是否有任何可靠的替代解析查詢字符串的parse_str()函數?有沒有可靠的parse_str()替代品,不容易出錯?

我發現它非常混亂,而且容易出錯特別是當查詢字符串從外部服務來(你不能完全控制它):

$error = "Error message"; 
parse_str("param1=hello&error=false"); // Overrides $error 

parse_str($externalQuery); 
// Which variables are setted and which not? 
+0

的*方法*不容易出錯。你*使用它的方式容易出錯。您的所有觀點都非常清楚地在PHP文檔中註明。 RTFM - ['parse_str()'](http://php.net/parse_str) – 2012-02-09 04:14:51

+2

@JasonMcCreary自動創建變量容易出錯,恕我直言。 – gremo 2012-02-09 10:46:29

+0

幾個PHP函數執行此操作。其中許多像'parse_str()'這樣的設計本質上就是這樣做的。恕我直言,這個功能似乎相當愚蠢。我只是建議你在使用可能不符合你期望的功能的函數時閱讀手冊。 – 2012-02-09 17:08:14

回答

1
$error = "Error message"; 
$output_array = array(); 
parse_str("param1=hello&error=false", $output_array); 
var_dump($output_array); 

你真的需要覆蓋現有變量或創建新的「未知」變量?

+0

不需要覆蓋現有的變量,它只是一個關於該方法如何容易出錯的示例。 – gremo 2012-02-08 20:52:54

5

將可選的第二個參數傳遞給parse_str(),它會將值放入關聯數組中,而不是創建/覆蓋變量。來自php manual

如果存在第二個參數arr,則變量將作爲數組元素存儲在此變量中。

您必須先初始化數組。這樣做:

$error = "Error message"; 
$vars = array(); 
parse_str("param1=hello&error=false", $vars); 
echo $error . "\n"; 
print_r($vars); 

,輸出:

Error message 
Array 
(
    [param1] => hello 
    [error] => false 
) 
1

再看一下該文檔。 parse_str支持傳遞將存儲變量的第二個參數。

$error = "Error message"; 
parse_str("param1=hello&error=false", $data); 

echo $error; // "Error message" 
var_dump($data['error']); //false 
0

你可以傳遞一個數組parse_str,它將把查詢字符串KV對中:

$error = "Error message"; 
$queryString = array(); 
parse_str("param1=hello&error=false", $queryString); 

echo $error; //"Error message" 
echo $queryString["error"]; //"false" (actually will echo "")