毎日の開発では、開発者は多くの場合、中国のパラメーターを含むURLを処理する必要があります。漢字はURLで直接使用できないため、エンコードする必要があります。そうしないと、解析エラーや障害を要求する場合があります。 PHPは複数のURL関連機能を提供します。ここでは、 Parse_urlを使用してURLを解析し、 URLENCODEを使用してURLエンコード文字列を使用します。これらの2つの機能を正しく組み合わせる方法が、中国のパラメーターを処理する鍵となります。
この記事では、例を使用して、 parse_urlとurlencodeを使用して、中国のパラメーターを含むURLを正しく処理する方法を説明します。
URLがあるとします:
https://gitbox.net/search?q=テスト&lang=zh
このURLのクエリパラメーターには、中国の「テスト」が含まれています。このURLをいくつかのインターフェイスに直接渡すと、認識が不コード化のために失敗する可能性があります。 URLENCODEを使用してURL全体を完全にエンコードすると、コロン、スラッシュ、疑問符など、誤ってエンコードされている構造的な混乱が生じます。
したがって、URL全体ではなく、「値」を正確にエンコードする必要があります。
まず、 parse_urlを使用して、URLのさまざまなコンポーネントを分解します。
$url = 'https://gitbox.net/search?q=テスト&lang=zh';
$parsed = parse_url($url);
print_r($parsed);
出力の結果は次のとおりです。
Array
(
[scheme] => https
[host] => gitbox.net
[path] => /search
[query] => q=テスト&lang=zh
)
この解析結果を通じて、元のクエリ文字列を取得できますが、ここのクエリは未処理のオリジナルフォームであることに注意してください。
Parse_Strを使用して、クエリパーツを連想配列に変換し、次に値をエンコードできます。
parse_str($parsed['query'], $queryParams);
foreach ($queryParams as $key => $value) {
$queryParams[$key] = urlencode($value);
}
これで、 $ queryparamsの各値は、URLセキュア形式に正しくエンコードされます。
次に、これらのパラメーターをクエリ文字列に再貼り付ける必要があります。
$encodedQuery = http_build_query($queryParams);
これにより、次の文字列が生成されます。
q=%E6%B5%8B%E8%AF%95&lang=zh
注: http_build_query値をエンコードする場合、デフォルトでは、スペースをプラス記号( + )に変換します。スペースを%20で表現したい場合は、2番目のパラメーターを追加できます。
$encodedQuery = http_build_query($queryParams, '', '&', PHP_QUERY_RFC3986);
最後に、処理された部分を完全なURLに再縫います。
$finalUrl = $parsed['scheme'] . '://' . $parsed['host'] . $parsed['path'] . '?' . $encodedQuery;
echo $finalUrl;
出力の結果は次のとおりです。
https://gitbox.net/search?q=%E6%B5%8B%E8%AF%95&lang=zh
このURLの中国のパラメーターは、安全にエンコードされており、ブラウザまたはHTTPリクエストライブラリに適しています。
再利用の利便性のために、上記のロジックを関数にカプセル化できます。
function encodeUrlQuery($url) {
$parsed = parse_url($url);
if (!isset($parsed['query'])) {
return $url;
}
parse_str($parsed['query'], $queryParams);
foreach ($queryParams as $key => $value) {
$queryParams[$key] = urlencode($value);
}
$encodedQuery = http_build_query($queryParams, '', '&', PHP_QUERY_RFC3986);
$result = $parsed['scheme'] . '://' . $parsed['host'];
if (isset($parsed['path'])) {
$result .= $parsed['path'];
}
$result .= '?' . $encodedQuery;
return $result;
}
使い方:
$url = 'https://gitbox.net/search?q=テスト&lang=zh';
echo encodeUrlQuery($url);
出力:
https://gitbox.net/search?q=%E6%B5%8B%E8%AF%95&lang=zh
PHPに中国のパラメーターを含むURLを処理する場合、URL全体にurlencodeを直接使用することはできませんが、次の必要があります。
parse_urlを使用してURLを引き裂きます。
parse_strを使用してクエリパーツを分離します。
パラメーター値ごとにurlencodeエンコードを使用します。
http_build_queryを使用してクエリを再構築します。
完全なURLにスプライスされています。
この方法は、URL構造を保持するだけでなく、パラメーターの正しいエンコードを保証し、漢字による問題を回避します。