関数・クラス解説

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

参考

  • parse_url() - URL を解釈し、その構成要素を返す
  • pathinfo() - ファイルパスに関する情報を返す
  • http_build_query() - URL エンコードされたクエリ文字列を生成する
  • urldecode() - URL エンコードされた文字列をデコードする
  • ワード検索


    ※入力キーワードが、関数名・説明文・タグに含まれるものを検索

    関数名アルファベット別

    A B C D E F G H I J
    K L M N O P Q R S T
    U V W X Y Z _

    最終更新一覧

    stristr
     大文字小文字を区別せず文字列を検索し、ヒット箇所以降(あるいは以前)の文字列を返却

    stripslashes
     バックスラッシュでエスケープされた文字列から、バックスラッシュを取り除く

    stripos
     大文字小文字を区別せずに文字列が最初に現れる位置を取得する

    stripcslashes
     addcslashes() でクォートされた文字列をアンクォートする

    strip_tags
     文字列から HTML と PHP のタグを除去して返却

    strcspn
     指定した文字が最初に現れる位置を調べる

    strcoll
     ロケールに基づいて2つの文字列を比較し同じか(あるいは大小)を判定する

    strcmp
     2つの文字列を比較し同じか(あるいは大小)を判定する

    strchr
     strstr() のエイリアス

    strcasecmp
     2つの文字列を比較(大文字小文字を区別せず同じとみなす)

    カテゴリー一覧

    PHP の振る舞いの変更
    音声フォーマットの操作
    認証サービス
    コマンドライン関連
    圧縮およびアーカイブ
    暗号
    データベース関連
    日付および時刻関連
    ファイルシステム
    自然言語および文字エンコーディング
    画像処理および作成
    メール関連
    数学
    テキスト以外の MIME 型
    プロセス制御
    その他の基本モジュール
    その他のサービス
    検索エンジン用の拡張モジュール
    サーバー固有のモジュール
    セッション関連
    テキスト処理
    変数・データ型関連
    ウェブサービス
    Windows 用のモジュール
    XML 操作
    GUI用の拡張モジュール