codeIgniter のデフォルト設定では、URL に非 ASCII 文字が含まれる場合、CI は容赦なくエラーをスローします。この記事では、CodeIgniter が中国語の文字列を含む URL の問題をどのように解決するかをプログラマーに紹介します。
この URL で関数 urlencode を使用したらどうなるでしょうか?いいえ。 Web サーバーは URL エンコードされた URL を受信すると自動的にデコードし、PHP で取得した文字列を元の意味に変換し、Web サーバー独自の URL エンコード文字セット (IIS6 中国語版は GBK、Apache 2.2 は UTF) を使用するためです。 -8) がアプリケーションに送信され、CI によって取得された URL がすでにデコードされています。URL が URL エンコードされているかどうかに関係なく、ブラウザはリクエストを行うときに自動的にそれを検出し、エンコードが自動的に実行されます。したがって、手動で URL コーディングを行っても問題は解決されません。では、この問題を解決するにはどうすればよいでしょうか?
CI のようなフレームワークの場合、私の観点は、それを変更するのではなく、それを拡張することです。CI は、application/core/ (バージョン 2.0 より前) にそれを使用するだけで済みます。ファイル MY_URI.php を application/libraries/) に次の内容でコピーします:
リーリー中国語の URL が検出を通過できるように、元の CI_URI の _filter_uri メソッドを上書きしました。ただし、URL にスペースが含まれている場合は機能しません。 urlencode はスペースを + に変換することが判明しましたが、CI のデフォルト設定では URL に + を含めることはできません。OK、
を入れてください。 リーリーが
に変更されました リーリー以上です。
または
最初のステップは、config.php の
を変更することです リーリー
を
に置き換えます リーリー上記の操作はすべて完了しましたが、URL で取得した中国語の情報が文字化けするという新たな問題が発生する可能性があります。サーバー上でこの問題が発生するかどうかはわかりませんが、IIS で発生しました。 )。ただし、ローカルでは正常であり、ローカルでは apache が使用されます。
さて、プログラム内の $_SERVER['REQUEST_URI'] を出力してみたら文字化けしていました。何が起こっているのでしょうか?これは、uri 内のパラメータを取得する前に、パラメータがエンコードされていることを意味します。iconv を使用してデコードします。 リーリー
これを印刷して確認してください。元の中国語パラメータが印刷されており、それらは正しいです。この問題は解決されましたが、まだ疑問があります。URL が gb2312 でエンコードされているのはなぜですか? それがプログラムで使用されている場合 (utf-8 エンコードを使用しています)、utf-8 エンコードにも変換する必要があります。それはWebサーバーに関連しているのと同じです。回答していただければ幸いです。
中国語の文字列を含む URL の問題を完全に解決する上記の CodeIgniter は、編集者が共有したすべてのコンテンツです。参考にしていただければ幸いです。また、皆様にも Bangkejia をサポートしていただければ幸いです。