サーチ…


URLの解析

URLを個々のコンポーネントにparse_url()するには、 parse_url()使用します。

$url = 'http://www.example.com/page?foo=1&bar=baz#anchor';
$parts = parse_url($url);

上記を実行した後、 $partsの内容は次のようになります:

Array
(
    [scheme] => http
    [host] => www.example.com
    [path] => /page
    [query] => foo=1&bar=baz
    [fragment] => anchor
)

また、URLの1つのコンポーネントだけを選択的に返すこともできます。 querystringだけを返すには:

$url = 'http://www.example.com/page?foo=1&bar=baz#anchor';
$queryString = parse_url($url, PHP_URL_QUERY);

PHP_URL_SCHEMEPHP_URL_HOSTPHP_URL_PORTPHP_URL_USERPHP_URL_PASSPHP_URL_PATHPHP_URL_QUERY 、およびPHP_URL_FRAGMENTいずれかの定数が使用PHP_URL_FRAGMENTます。

クエリ文字列をキー値ペアにさらに解析するには、 parse_str()使用します。

$params = [];
parse_str($queryString, $params);

上記を実行した後、 $params配列には次の値が設定されます。

Array
(
    [foo] => 1
    [bar] => baz
)

別のURLにリダイレクトする

header()関数を使用して、ブラウザに別のURLにリダイレクトさせることができます。

$url = 'https://example.org/foo/bar';
if (!headers_sent()) { // check headers - you can not send headers if they already sent
  header('Location: ' . $url);
  exit; // protects from code being executed after redirect request
} else {
  throw new Exception('Cannot redirect, headers already sent');
}

相対URLにリダイレクトすることもできます(公式のHTTP仕様の一部ではありませんが、すべてのブラウザで動作します):

$url = 'foo/bar';
if (!headers_sent()) {
  header('Location: ' . $url);
  exit;
} else {
  throw new Exception('Cannot redirect, headers already sent');
}

ヘッダーが送信されている場合は、 meta refresh HTMLタグを送信することもできます。

警告:メタリフレッシュタグは、HTMLがクライアントによって正しく処理されているかどうかに依存しています。一般に、Webブラウザでのみ動作します。また、ヘッダーが送信された場合、バグが発生する可能性があり、例外が発生することに注意してください。

また、メタリフレッシュタグを無視するクライアントの場合、ユーザーがクリックするためのリンクを表示することもできます。

$url = 'https://example.org/foo/bar';
if (!headers_sent()) {
  header('Location: ' . $url);
} else {
  $saveUrl = htmlspecialchars($url); // protects from browser seeing url as HTML
  // tells browser to redirect page to $saveUrl after 0 seconds
  print '<meta http-equiv="refresh" content="0; url=' . $saveUrl . '">';
  // shows link for user
  print '<p>Please continue to <a href="' . $saveUrl . '">' . $saveUrl . '</a></p>';
}
exit;

配列からURLエンコードされたクエリ文字列を構築する

http_build_query()は、配列またはオブジェクトからクエリ文字列を作成します。これらの文字列は、URLに追加してGETリクエストを作成するか、たとえばcURLなどのPOSTリクエストで使用できます。

$parameters = array(
    'parameter1' => 'foo',
    'parameter2' => 'bar',
);
$queryString = http_build_query($parameters);

$queryStringは次の値を持ちます:

parameter1=foo&parameter2=bar

http_build_query()は多次元配列でも動作します:

$parameters = array(
    "parameter3" => array(
        "sub1" => "foo",
        "sub2" => "bar",
    ),
    "parameter4" => "baz",
);
$queryString = http_build_query($parameters);

$queryStringには次の値が入ります:

parameter3%5Bsub1%5D=foo&parameter3%5Bsub2%5D=bar&parameter4=baz

これはURLでエンコードされたバージョンの

parameter3[sub1]=foo&parameter3[sub2]=bar&parameter4=baz


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow