ホームページ  >  記事  >  PHPフレームワーク  >  ThinkPHP で URL 中国語トランスコーディングを実装する方法

ThinkPHP で URL 中国語トランスコーディングを実装する方法

PHPz
PHPz転載
2023-05-26 20:11:101609ブラウズ

URL で中国語の文字を使用することは、非常に一般的な要件です。たとえば、フォーラムでは、投稿のタイトルが中国語であることが多く、そのタイトルを URL の一部として使用する必要があります。ページアドレスを生成します。ただし、歴史的な理由とプロトコルの制限により、URL では ASCII コード テーブルに存在する文字のみを使用できます。中国語の文字を使用して URL アドレスを生成できるようにするには、これらの文字を安全な URL 文字に変換する方法が必要です。

一般的なトランスコーディング方法は、urlencode 関数を使用することです。この関数の目的は、URL 内で競合が発生するのを避けるために、中国語の文字を特別な 16 進エンコーディングに変換することです。 ThinkPHP では、URL エンコードに url 関数を使用できます。例:

$url = url('/index/index', ['title' => urlencode('中文内容')]);

この例では、中国語のコンテンツを urlencode エンコードに変換し、それを title パラメーターとしてコントローラー メソッドに渡します。コントローラー メソッドでは、urldecode 関数を使用して、トランスコードされた中国語の文字を復元できます。例:

public function index($title)
{
    $title = urldecode($title);
    // ...
}

この方法は実行可能ですが、重大な欠点があります。つまり、16 進数でエンコードされた文字列は通常、元の中国語の文字列よりもはるかに長くなり、URL が非常に見苦しくなり、記憶に残らなくなります。 。

漢字の URL エンコードは、URL セーフな Base64 エンコードを使用して実現できるため、この問題は解決されます。 ThinkPHP では、base64url_encode 関数とbase64url_decode 関数を使用できます。例:

$url = url('/index/index', ['title' => base64url_encode('中文内容')]);

この例では、URL セーフな Base64 を使用して中国語のコンテンツをエンコードし、それをタイトル パラメーターとしてコントローラー メソッドに渡します。コントローラーメソッドでbase64url_decode関数を使用すると、元の中国語の文字にデコードできます。例:

public function index($title)
{
    $title = base64url_decode($title);
    // ...
}

Base64 エンコードを使用する方法には、urlencode 方法より明らかな利点があります。つまり、生成されるエンコードされた文字列は比較的短く、より美しく、読みやすくなります。ただし、このメソッドが URL セーフな文字列を生成する場合、記号を - に置き換える、記号 / を _ に置き換える、= を削除するなど、いくつかの特殊文字を使用して元の Base64 文字を置き換える必要があることに注意してください。末尾に表示される場合があります。

実際の開発では、必要に応じて適切なトランスコーディング方法を選択できます。 urlencode であれ Base64 エンコードであれ、生成された URL が仕様に準拠しているかどうかに注意し、コントローラー メソッドで正しいデコード処理を実行して、アプリケーションが漢字を含む URL を適切に処理できるようにする必要があります。

以上がThinkPHP で URL 中国語トランスコーディングを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。