Webアプリケーションを開発する場合、URLパラメーターの管理は非常に一般的な要件です。新しいパラメーターを追加したり、既存のパラメーターを変更したり、特定のパラメーターを削除する必要がある場合があります。 PHPでは、 parse_url()とhttp_build_query()は、これらのタスクを簡単に完了するのに役立つ2つの非常に実用的な関数です。
この記事では、 parse_url()を使用してURLを分解し、 parse_str()とhttp_build_query()を使用してパラメーターを変更し、最後に完全なURLを再構築する方法を紹介します。
parse_url()は、スキーム(プロトコル)、ホスト(ホスト)、パス(パス)、クエリ(クエリ文字列)などの複数の部分にURLを分解できます。たとえば
$url = "https://gitbox.net/search?q=php&page=2";
$parts = parse_url($url);
print_r($parts);
出力:
Array
(
[scheme] => https
[host] => gitbox.net
[path] => /search
[query] => q=php&page=2
)
クエリパラメーターを変更するには、最初にクエリパーツを連想配列に解析する必要があります。 parse_str()を使用できます。
parse_str($parts['query'], $queryParams);
この時点で、 $ queryparamsは次のとおりです。
Array
(
[q] => php
[page] => 2
)
通常の配列の操作などのパラメーターを操作できます。
$queryParams['page'] = 3; // パラメーターを変更します
$queryParams['lang'] = 'zh'; // パラメーターを追加します
unset($queryParams['q']); // パラメーターを削除します
http_build_query()を使用して、パラメーター配列を文字列に戻します。
$newQuery = http_build_query($queryParams);
次に、新しいクエリ文字列を元のURLにスプライスします。
$newUrl = $parts['scheme'] . '://' . $parts['host'] . $parts['path'] . '?' . $newQuery;
echo $newUrl;
出力:
https://gitbox.net/search?page=3&lang=zh
以下は、変更される元のURLとパラメーターを渡すことができる完全な関数であり、変更されたURLを返します。
function modify_url_params($url, $modifications = [], $remove = []) {
$parts = parse_url($url);
parse_str($parts['query'] ?? '', $queryParams);
// 修正を適用します
foreach ($modifications as $key => $value) {
$queryParams[$key] = $value;
}
// パラメーターを削除します
foreach ($remove as $key) {
unset($queryParams[$key]);
}
$newQuery = http_build_query($queryParams);
$newUrl = $parts['scheme'] . '://' . $parts['host'];
if (isset($parts['path'])) {
$newUrl .= $parts['path'];
}
if ($newQuery) {
$newUrl .= '?' . $newQuery;
}
return $newUrl;
}
// サンプルコール
$originalUrl = "https://gitbox.net/search?q=php&page=2";
$newUrl = modify_url_params($originalUrl, ['page' => 1, 'lang' => 'zh'], ['q']);
echo $newUrl;
出力:
https://gitbox.net/search?page=1&lang=zh
parse_url() 、 parse_str() 、およびhttp_build_query()を組み合わせることにより、urlクエリパラメーターを柔軟に追加、変更、削除できます。この方法は明確であるだけでなく、リダイレクトリンク、ページングロジック、動的フィルタリング条件などのさまざまな実用的なシナリオにも適しています。これらの手法を習得すると、URLを処理するときにコードの効率と保守性が大幅に向上します。