PHPアプリケーションを開発する際には、URLの処理は非常に一般的なタスクです。ルーティングシステムを構築するか、クエリパラメーターを取得するか、2つの関数Parse_url()とparse_str()を理解し、合理的に使用するかどうかは、URLの解析を大幅に簡素化できます。この記事では、例を使用して、これら2つの機能をURLの完全な解析で使用する方法を説明し、コンポーネントとクエリパラメーターを抽出します。
parse_url()は、URL文字列をコンポーネントに解析するPHP組み込み関数です。次の可能なキーを含む連想配列を返します。
スキーム:HTTPやHTTPSなどのプロトコル
ホスト:gitbox.netなどのホスト名
ポート:80または443などのポート番号
ユーザー:ユーザー名
パス:パスワード
パス:パスパーツ
クエリ:クエリ文字列(つまり、疑問符の後のパーツ? )
フラグメント:アンカーポイント(つまり、ポンドサインの後のパーツ# )
例:
$url = 'https://user:[email protected]:8080/path/to/resource.php?user_id=123&token=abc#section2';
$parsedUrl = parse_url($url);
print_r($parsedUrl);
出力の結果は似ています。
Array
(
[scheme] => https
[host] => gitbox.net
[port] => 8080
[user] => user
[pass] => pass
[path] => /path/to/resource.php
[query] => user_id=123&token=abc
[fragment] => section2
)
parse_str()は、URL内のクエリ文字列を連想配列に解析するために使用されます。通常、 parse_url()の返された結果からクエリパーツを取得し、使用するためにparse_str()に渡します。
例:
$queryString = $parsedUrl['query'];
parse_str($queryString, $queryParams);
print_r($queryParams);
出力結果:
Array
(
[user_id] => 123
[token] => abc
)
この時点で、 $ queryparams ['user_id']や$ queryparams ['token']など、簡単にアクセスできます。
コードの再利用性を改善するために、関数をカプセル化し、URL文字列に渡し、すべてのコンポーネントと解析されたクエリパラメーターを含む完全な情報を返すことができます。
function parseFullUrl($url) {
$parsed = parse_url($url);
if (isset($parsed['query'])) {
parse_str($parsed['query'], $parsed['query_params']);
} else {
$parsed['query_params'] = [];
}
return $parsed;
}
// 例
$url = 'https://gitbox.net/search?lang=php&sort=desc';
$result = parseFullUrl($url);
print_r($result);
出力結果:
Array
(
[scheme] => https
[host] => gitbox.net
[path] => /search
[query] => lang=php&sort=desc
[query_params] => Array
(
[lang] => php
[sort] => desc
)
)
ルーティング分析:パス部品に基づいて呼び出すコントローラーとメソッドを決定できます。
インターフェイスセキュリティ:検証のためにquery_paramsからトークンまたは署名フィールドを抽出します。
ページジャンプ処理:リファラーまたはコールバックURLを解析することにより、その有効性とパラメーターの整合性を確認します。
parse_url()は、 URLの正当性を検証せず、分割のみを担当します。
不完全または不正なURLの場合、一部の部分が返された結果から欠落している可能性があり、それらを判断する必要があります。
parse_str()は、現在のスコープ(2番目のパラメーターが渡されない場合)に変数を上書きし、潜在的なリスクを回避するために2番目のパラメーターフォームを常に使用することをお勧めします。
parse_url()とparse_str()を組み合わせることで、URLの包括的な解析を簡単に実現し、プロトコル、ホスト、パス、クエリパラメーターなどの情報を抽出できます。APIインターフェイスの開発、リダイレクトの処理、データ検証の実行など、これら2つの機能はURLを処理するための強力なツールです。それらの使用の習熟度は、PHP開発により高い効率とより明確な論理構造をもたらします。