php は http_build_query、parse_url、および parse_str を使用して URL を作成および解析します。必要な友達はそれを参照できます。
1.http_build_query
http_build_query は、urlencode の後にリクエスト文字列を作成できます。
- string http_build_query (mixed $query_data [, string $numeric_prefix [, string $arg_separator [, int $enc_type = PHP_QUERY_RFC1738 ]]] )
コードをコピー
パラメータ:
クエリデータ
配列またはプロパティを含むオブジェクトを指定できます。
query_data 配列は、単純な 1 次元構造、または配列で構成される配列 (他の配列を含むことができる) にすることができます。
query_data がオブジェクトの場合、パブリック属性のみが結果に追加されます。
numeric_prefix
基礎となる配列で数値添字が使用されており、このパラメーターが指定されている場合、このパラメーター値は基礎となる配列内の数値添字要素のプレフィックスとして使用されます。
これは、後でデータをデコードするときに、PHP またはその他の CGI プログラムが有効な変数名を取得できるようにするためです。
arg_separator
このパラメータが指定されて使用されない限り、arg_separator.output がパラメータを区切るために使用されます (このパラメータは php.ini で使用でき、デフォルトは「&」です)。
enc_type
デフォルトでは、PHP_QUERY_RFC1738 が使用されます。
enc_type が PHP_QUERY_RFC1738 の場合、エンコードは ? RFC 1738 標準と application/x-www-form-urlencoded メディア タイプに基づいて行われ、スペースはプラス記号 (+) としてエンコードされます。
enc_type が PHP_QUERY_RFC3986 の場合、? RFC 3986 に従ってエンコードされ、スペースはパーセント (%20) でエンコードされます。
例 1: query_data パラメーターのみを使用します
- $data = array(
- '名前' => 'fdipzone',
- '性別' => '男性',
- '職業' => 'プログラマー',
- '説明' => '新しいプログラマー'
- );
- echo http_build_query($data);
- ?>
コードをコピー
出力:
名前=fdipzone&性別=男性&職業=プログラマー&説明=a+新人+プログラマー
例 2: query_data は 1 次元の添字配列を使用し、 を指定します
numeric_prefix=info_,arg_separator=#,enc_type=PHP_QUERY_RFC3986
- $data = array('fdipzone','男性','プログラマー','新しいプログラマー');
- echo http_build_query($data, 'info_', '#', PHP_QUERY_RFC3986) ;
- ?>
コードをコピー
出力:
- info_0=fdipzone#info_1=male#info_2=programmer#info_3=a%20new%20programmer
コードをコピー
2.parse_url
parse_url は URL を解析し、そのコンポーネントを返します
- mixed parse_url ( string $url [, int $component = -1 ] )
コードをコピー
パラメータ:
URL
解析される URL。無効な文字は _ に置き換えられます。
コンポーネント
URL の指定された部分の文字列を取得するには、PHP_URL_PATH、PHP_URL_QUERY、または PHP_URL_FRAGMENT のいずれかを使用します。 (PHP_URL_PORT として指定された場合を除き、整数値が返されます)。
戻り値:
parse_url() は、著しく修飾されていない URL に対して FALSE を返す場合があります。
返されるデータには通常、次のタイプが含まれます
スキーム (http など)、ホスト、ポート、ユーザー、パス、パス、クエリ (疑問符の後?)、フラグメント (ハッシュ記号 # の後)
例:
- $url = 'http://fdipzone:123456@www.fdipzone.com:80/test/index.php?id=1#tag';
- print_r(parse_url($url) );
- echo parse_url($url, PHP_URL_SCHEME).PHP_EOL;
- echo parse_url($url, PHP_URL_HOST).PHP_EOL;
- echo parse_url($url, PHP_URL_PORT).PHP_EOL;
- echo parse_url($url, PHP_URL_USER).PHP_ EOL ;
- echo parse_url($url, PHP_URL_PASS).PHP_EOL;
- echo parse_url($url, PHP_URL_PATH).PHP_EOL;
- echo parse_url($url, PHP_URL_QUERY).PHP_EOL;
- echo parse_url($url, PHP_URL_FRAGMENT).PHP_EOL;
- ?>
コードをコピー
出力:
- 配列
- (
- [スキーム] => http
- [ホスト] => www.fdipzone.com
- [ポート] => 80
- [ユーザー] => fdipzone
- [パス] => 123456
- [パス] => /test/index.php
- [クエリ] => id=1
- [フラグメント] => タグ
- )
- www.fdipzone.com
- 80
- fdipzone
- / test/index.php
- id=1
- タグ
-
-
コードをコピー
3.parse_str
parse_str は文字列を複数の変数に解析します
- void parse_str ( string $str [, array &$arr ] )
コードをコピー
str が URL によって渡されたクエリ文字列である場合、それを変数に解析し、現在のスコープに設定します。
パラメータ:
ストラ
入力文字列
arr
2 番目の変数 arr が設定されている場合、変数は代わりに配列要素としてこの配列に格納されます。
例 1: 現在のスコープに解決します
- $str = 'name=fdipzone&gender=男性&職業=プログラマー&explain=新しいプログラマー';
- parse_str($str);
- echo $name.PHP_EOL;
- echo $gender.PHP_EOL;
- echo $ professional.PHP_EOL;
- echo $explain.PHP_EOL;
- ?>
コードをコピー
出力:
- fdipzone
- 男性
- プログラマー
- 新人プログラマー
コードをコピー
例 2: 結果を arr 配列に保存します
- $str = 'name=fdipzone&gender=男性&profession=プログラマー&explain=新人プログラマー';
- parse_str($str, $arr);
- print_r($arr);
- ?>
コードをコピー
出力:
- 配列
- (
- [名前] => fdipzone
- [性別] => 男性
- [職業] => プログラマー
- [説明] => 新しいプログラマー
- )
コードをコピー
4. URL のクエリパラメータを取得して解析します。
最初に parse_url を使用してクエリを取得し、次に parse_str を使用してパラメータを解析します
- $url = 'http://www.fdipzone.com/test/index.php?name=fdipzone&gender=男性&職業=プログラマー&説明=新人プログラマー';
- $query = parse_url($url 、PHP_URL_QUERY);
- parse_str($query, $data);
- print_r($data);
- ?>
コードをコピー
出力:
- 配列
- (
- [名前] => fdipzone
- [性別] => 男性
- [職業] => プログラマー
- [説明] => 新しいプログラマー
- )
コードをコピー
|