サーチ…
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_SCHEME
、 PHP_URL_HOST
、 PHP_URL_PORT
、 PHP_URL_USER
、 PHP_URL_PASS
、 PHP_URL_PATH
、 PHP_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¶meter2=bar
http_build_query()
は多次元配列でも動作します:
$parameters = array(
"parameter3" => array(
"sub1" => "foo",
"sub2" => "bar",
),
"parameter4" => "baz",
);
$queryString = http_build_query($parameters);
$queryString
には次の値が入ります:
parameter3%5Bsub1%5D=foo¶meter3%5Bsub2%5D=bar¶meter4=baz
これはURLでエンコードされたバージョンの
parameter3[sub1]=foo¶meter3[sub2]=bar¶meter4=baz