PHP 組み込み関数研究シリーズの第 4 回では、PHP 関数 parse_str を使用してクエリ文字列を変数に解析します。主に、parse_str() 関数の役割と使用法について説明します。
parse_str() 関数は文字列を変数に解析できます。これは、クライアントとのデータ転送プロセスで、データが GET リクエストなどの文字列の形式で転送されることを意味します。次に、$_GET/$_POST などのグローバル変数を使用して、サーバー側で文字列と変数を変換します (http://www.liuhui.info/?index.php?var1=1&var2=2 など)。サーバーにリクエストします。次に、$_GET['var1'] を使用して文字列 var1=1&var2=2 を取得し、それを変数に変換します。 parse_str() 関数は同様の関数を実装できます。 parse_str() 関数を使用して $_SERVER['QUERY_STRING'] の値を解析すると、文字列と変数 ($var1 など) を直接変換できます。
1. 関数のプロトタイプ
コードは次のとおりです | コードをコピー |
void parse_str ( string str [, array &arr] ) |
第二に、バージョンの互換性
PHP 3、PHP 4、PHP 5
その3、基本的な使い方と機能例
1. 文字列を解析して変数に変換します
コードは次のとおりです | コードをコピー |
parse_str("var1=liuhui&var2=parse_str"); |
2. 文字列を解析し、変数を配列に保存します
コードは次のとおりです | コードをコピー |
parse_str("var1=liuhui&var2=parse_str",$array);
|
注: 変数を配列に格納するこの方法は、PHP 4.0.3 でのみ追加されました
3、解析された文字列にスペースが含まれています
コードは次のとおりです | コードをコピー |
parse_str("v ar1=liuhui&var 2=parse_str",$array); 出力: 配列 ([v_ar1] => liuhui [var_2] => parse_str ) |
手順: スペースをアンダースコアに直接変換_
4、注意事項
1. 配列パラメータが設定されていない場合、この関数によって設定された変数は、同じ名前の変数を上書きします。
2. php.ini の magic_quotes_gpc 設定は、この関数の出力に影響します。有効にすると、変数は parse_str() によって解析される前に addslashes() によって変換されます。
3. パラメータを処理する際の parse_str() 関数には脆弱性があり、攻撃者はこの脆弱性を利用して register_globals を有効にし、他の PHP スクリプトの脆弱性をさらに悪用する可能性があります。 parse_str() が引数を 1 つだけ指定して呼び出された場合、関数は引数が URL を介して渡されたリクエスト文字列であるかのように指定された文字列を解析しますが、外部の攻撃者は parse_str() の呼び出し中に多くのリクエスト変数を送信することでこれをトリガーする可能性があります。 .memory_limit リクエストが終了しました。 parse_str() の呼び出し中にリクエスト クロージャが実行された場合、register_globals タグは、関連する Web サーバー プロセスの存続期間中、開いたままになります。