関数・クラス解説
parse_str
version:PHP 4, PHP 5, PHP 7 (公式)クエリ文字列の内容を解析し変数に代入する
注意
この関数は result パラメータを必ず指定することが推奨されています!
フォーマット
void : parse_str ( string $encoded_string [, array &$result ] )
パラメータ
string $encoded_string (必須)
対象のクエリ文字列
array &$result (PHP8.0 以降は必須)
配列へ格納したい場合は、ここで指定した配列へ代入される。PHP 7.2 以降では、必ず指定することが推奨されています。
返値 void
値を返しません
解説
URL などで指定されるクエリ文字列と同じ形式の文字列を解析して現在のスコープの変数、或いは配列へ代入します。
スペースやドットなど、PHPの変数名や配列キーでは利用できない文字が指定された場合、該当の文字はアンダースコアへ変換されます。
記述サンプル
//PHP 7.4.6で実行
//クエリ文字列を指定
$str = "one=1&two=2&three=hoge&ary[]=test&ary[]=fuga+foo";
//実行
parse_str($str);
//結果 変数が生成される
echo $one; // 1
echo $two; // 2
echo $three; // hoge
echo $ary[0]; // test
echo $ary[1]; // fuga foo
※正し、PHP7.2 以上は、第2引数を指定しなければエラーが発生
parse_str(): Calling parse_str() without the result argument is deprecated
// 推奨
parse_str($str, $result);
echo $result['one']; // 1
echo $result['two']; // 2
echo $result['three']; // hoge
echo $result['arr'][0]; // test
echo $result['arr'][1]; //fuga foo
/* ----------------------------- */
//PHPでは利用できない文字が指定された場合
$str = "This is a Pen=Yes";
//実行
parse_str($str);
//アンダースコアに変換される
echo $This_is_a_Pen; // Yes
//配列を指定
parse_str($str, $result);
//配列キーがアンダースコアに変換される
echo $result['This_is_a_Pen']; // Yes
参考リンク
・pathinfo ファイルパスに関する情報を返す・http_build_query URL エンコードされたクエリ文字列を生成する
・parse_url URL を解釈し、その構成要素を返す
・urldecode URL エンコードされた文字列をデコードする
タグ
クエリ 変数 配列 代入 String 文字列
公式リファレンス
書式
parse_str ( string $encoded_string [, array &$result ] ) : void
説明
URL 経由で渡されるクエリ文字列と同様に encoded_string を処理し、現在のスコープに変数をセットします。 (result が指定された場合は、配列 result にセットします)
パラメータ
- encoded_string
- 入力文字列。
- result
- 2 番目の引数 result が指定された場合、 変数は、代わりに配列の要素としてこの変数に保存されます。 警告 この関数を result パラメータを指定せずに使うことは 絶対に おすすめしません し、 PHP 7.2 以降では 推奨されません 関数スコープの変数に動的に値を設定すると、 register_globals と全く同じ問題で苦しむことになります。 なぜこのことが危険なのかを説明するために、 グローバル変数の登録機能の使用法 を読んでください。
返値
値を返しません。
注意
注意: 全ての作成された変数 (第二引数が設定された場合は配列に設定される値) の値は、既に urldecode() されています。
注意: 現在の QUERY_STRING を取得するには、変数 $_SERVER['QUERY_STRING'] を使用する事ができます。また、 外部から来る変数 のセクションも読んでください。
注意: magic_quotes_gpc の設定が、この関数の出力に影響を与えます。というのも parse_str() が使用している仕組みは PHP が $_GET や $_POST などの設定に使用しているものと同じだからです。警告 この関数を result パラメータを指定せずに使うことは 絶対に おすすめしません し、 PHP 7.2 以降では 推奨されません 関数スコープの変数に動的に値を設定すると、 register_globals と全く同じ問題で苦しむことになります。 なぜこのことが危険なのかを説明するために、 グローバル変数の登録機能の使用法 を読んでください。
更新履歴
バージョン | 説明 |
---|---|
7.2.0 | parse_str()関数を 第二引数を指定せずに使うと E_DEPRECATED レベルの警告が発生するようになりました。 |
サンプル
例1 parse_str() の使用法
$str = "first=value&arr[]=foo+bar&arr[]=baz";
// 推奨
parse_str($str, $output);
echo $output['first']; // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz
// お勧めできない
parse_str($str);
echo $first; // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz
PHP における変数は、名前にドットやスペースを許容しないので、 そういった値はアンダースコアに変換されます。同じことは、 この関数に result パラメータを指定した 場合の、配列のキーの名前にも当てはまります。
例2 parse_str() name mangling
parse_str("My Value=Something");
echo $My_Value; // Something
parse_str("My Value=Something", $output);
echo $output['My_Value']; // Something
参考
ワード検索
※入力キーワードが、関数名・説明文・タグに含まれるものを検索関数名アルファベット別
最終更新一覧
●stristr
大文字小文字を区別せず文字列を検索し、ヒット箇所以降(あるいは以前)の文字列を返却
●stripslashes
バックスラッシュでエスケープされた文字列から、バックスラッシュを取り除く
●stripos
大文字小文字を区別せずに文字列が最初に現れる位置を取得する
●stripcslashes
addcslashes() でクォートされた文字列をアンクォートする
●strip_tags
文字列から HTML と PHP のタグを除去して返却
●strcspn
指定した文字が最初に現れる位置を調べる
●strcoll
ロケールに基づいて2つの文字列を比較し同じか(あるいは大小)を判定する
●strcmp
2つの文字列を比較し同じか(あるいは大小)を判定する
●strchr
strstr() のエイリアス
●strcasecmp
2つの文字列を比較(大文字小文字を区別せず同じとみなす)
カテゴリー一覧
PHP の振る舞いの変更
音声フォーマットの操作
認証サービス
コマンドライン関連
圧縮およびアーカイブ
暗号
データベース関連
日付および時刻関連
ファイルシステム
自然言語および文字エンコーディング
画像処理および作成
メール関連
数学
テキスト以外の MIME 型
プロセス制御
その他の基本モジュール
その他のサービス
検索エンジン用の拡張モジュール
サーバー固有のモジュール
セッション関連
テキスト処理
変数・データ型関連
ウェブサービス
Windows 用のモジュール
XML 操作
GUI用の拡張モジュール