http_build_query

関数の概要

http_build_query は、配列やオブジェクトからURLのクエリ文字列を生成するPHPの組み込み関数です。WebアプリケーションでGETリクエストのパラメータを作成するときや、ツール同士でデータをやり取りするときに便利に使えます。配列のキーと値を自動的にエンコードして、正しい形式のクエリ文字列を簡単に作成可能です。

パラメータの説明

  • query_data (array|object) : クエリに変換したい配列やオブジェクト。キーと値のペアを指定。
  • numeric_prefix (string) : 配列のキーが数値のときに付加する文字列。省略可能。
  • arg_separator (string) : クエリの区切り文字。デフォルトは ‘&’。
  • enc_type (int) : エンコードのタイプを指定。PHP_QUERY_RFC1738(デフォルト)はスペースを「+」に、PHP_QUERY_RFC3986は「%20」にエンコード。

戻り値

指定した配列やオブジェクトの内容をURLクエリ形式の文字列として返します。失敗すると空文字列を返します。

使用例

基本的な使い方

<?php
$params = [
  'name' => '山田太郎',
  'age' => 28,
  'city' => '東京'
];
$query = http_build_query($params);
echo $query;
?>

このコードは、name=山田太郎&age=28&city=東京 のようなクエリ文字列を生成します。日本語はURLエンコードされて表示されます。

ネストした配列の変換例

<?php
$params = [
  'user' => [
    'name' => '佐藤花子',
    'email' => 'sato@example.com'
  ],
  'page' => 2
];
$query = http_build_query($params);
echo $query;
?>

この場合、クエリ文字列は user%5Bname%5D=佐藤花子&user%5Bemail%5D=sato%40example.com&page=2 のようにネストした配列も階層を角括弧表記で表現します。

区切り文字の変更

<?php
$params = [
  'key1' => 'value1',
  'key2' => 'value2'
];
$query = http_build_query($params, '', ';');
echo $query;
?>

デフォルトは & ですが、3番目の引数を使ってセミコロン(;)を区切りに変更できます。結果は key1=value1;key2=value2 のようになります。

エンコードタイプの指定

<?php
$params = ['q' => 'PHP 関数'];
// PHP_QUERY_RFC1738(デフォルト)
echo http_build_query($params) . "n";
// PHP_QUERY_RFC3986(スペースは%20になる)
echo http_build_query($params, '', '&', PHP_QUERY_RFC3986);
?>

エンコードタイプを変更することで、スペースが「+」か「%20」かの違いを選択可能です。互換性の問題がある場合に使い分けます。

関連する関数

  • parse_str : URLクエリ文字列を配列に変換する逆の操作で使います。
  • urlencode : 単一の文字列をURLエンコードするときに使用します。
  • rawurlencode : RFC3986準拠のエンコードをしたい場合に使います。

まとめ

http_build_query はPHPで配列やオブジェクトから安全かつ正確にURLクエリ文字列を作成できる非常に便利な関数です。GETリクエストのパラメータ作成や外部APIとの通信でのURL構築に重宝します。引数でカスタマイズもでき、初心者からプロの現場まで幅広く活用可能です。