2012-02-08 18 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) –

+2

@ JasonMcCreary変数を自動的に作成するのはエラーが起こりやすい、IMHOです。 – gremo

+0

いくつかのPHP関数がこれを行います。その多くは、 'parse_str()'のように、本質的にそうするように設計されています。機能の欠陥は、むしろばかばかしいように見える。あなたが期待している*振る舞いをしないかもしれない関数を使うときには、マニュアルを読むことを提案するだけです。 –

答えて

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

は、あなたが本当に必要ですか既存の変数を上書きするか、新しい「未知の」変数を作成するか?

+0

既存の変数を上書きする必要はありませんが、その方法がエラーを起こしやすい方法の例です。 – gremo

5

オプションの第2引数をparse_str()に渡すと、変数を作成/上書きする代わりに連想配列に値が配置されます。 php manual

第2パラメータ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は、変数を格納する2番目のパラメータを渡すことをサポートしています。

$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 "") 
関連する問題