現在の位置: ホーム> 最新記事一覧> parse_urlおよびurlencodeを使用した正しいエンコーディング処理

parse_urlおよびurlencodeを使用した正しいエンコーディング処理

gitbox 2025-05-26

毎日の開発では、開発者は多くの場合、中国のパラメーターを含むURLを処理する必要があります。漢字はURLで直接使用できないため、エンコードする必要があります。そうしないと、解析エラーや障害を要求する場合があります。 PHPは複数のURL関連機能を提供します。ここでは、 Parse_urlを使用してURLを解析し、 URLENCODEを使用してURLエンコード文字列を使用します。これらの2つの機能を正しく組み合わせる方法が、中国のパラメーターを処理する鍵となります。

この記事では、例を使用して、 parse_urlurlencodeを使用して、中国のパラメーターを含むURLを正しく処理する方法を説明します。

1。問題の背景

URLがあるとします:

 https://gitbox.net/search?q=テスト&lang=zh

このURLのクエリパラメーターには、中国の「テスト」が含まれています。このURLをいくつかのインターフェイスに直接渡すと、認識が不コード化のために失敗する可能性があります。 URLENCODEを使用してURL全体を完全にエンコードすると、コロン、スラッシュ、疑問符など、誤ってエンコードされている構造的な混乱が生じます。

したがって、URL全体ではなく、「値」を正確にエンコードする必要があります。

2。Parse_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
)

この解析結果を通じて、元のクエリ文字列を取得できますが、ここのクエリは未処理のオリジナルフォームであることに注意してください。

3.クエリパラメーターを抽出して処理します

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);

4.完全なURLをスプライスします

最後に、処理された部分を完全な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リクエストライブラリに適しています。

5。関数にカプセル化されています

再利用の利便性のために、上記のロジックを関数にカプセル化できます。

 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

6。概要

PHPに中国のパラメーターを含むURLを処理する場合、URL全体にurlencodeを直接使用することはできませんが、次の必要があります。

  1. parse_urlを使用してURLを引き裂きます。

  2. parse_strを使用してクエリパーツを分離します。

  3. パラメーター値ごとにurlencodeエンコードを使用します。

  4. http_build_queryを使用してクエリを再構築します。

  5. 完全なURLにスプライスされています。

この方法は、URL構造を保持するだけでなく、パラメーターの正しいエンコードを保証し、漢字による問題を回避します。