今回はJSでURI(url)を文字化けせずにエンコードする方法を紹介します。 , JS で encodeURI(url) を使用するときの注意事項は何ですか。以下は実際的なケースです。見てみましょう。
通常は encodeURIComponent(parmeName)+"="+encodeURIComponent(parmeValue);
受信時は直接 String paramValue = request.getParameter(paramName) // コンテナは自動的にデコードします。
encodeURIComponent がUTF-8 エンコード規則に従ってコンパイルされます。
コンテナーも request.getParameter(paramName) に従って UTF-8 を解釈する場合、正しいです。 2 番目の encodeURIComponent(...) を実行する必要はありません。クライアント
コンテナが UTF-8 に従って request.getParameter(paramName) をデコードしない場合、結果は 1 つだけ、つまり文字化けしたコードになります
コンテナがデコードするために使用するエンコーディングは request.setCharacterEncoding(* に依存します) **) またはサーバー プログラム構成。
JSP プログラムを使用している場合は、request.setCharacterEncoding("UTF-8") を使用して、コンテナーが送信されたパラメーターをデコードするときに UTF-8 を使用するようにサーバー構成を変更できます。 GET.
クライアント送信前に二次エンコードは必要なく、受信時に request.getParameter(paramName) を直接実行するだけです
なぜインターネット上の一部の人々は、クライアント側で string を 2 回エンコードすることを提案するのでしょうか。コンテナが使用するエンコード ルールをプロジェクトで指定するために必要です。たとえば、エンコードされていないパラメータ コンテンツを別のページから受信する必要がある場合など、送信されたパラメータをデコードするために必要です。 (あるいは、開発者がこのやや複雑なことで混乱しており、パラメータを受け取る作業を正しく実行する方法がわからないのかもしれません)
現時点では、クライアント上のパラメータの二次エンコードによって、「マルチバイト文字のコミット」という難しい問題を効果的に回避できます。 」。
最初のエンコーディングにより、パラメーターの内容にはマルチバイト文字が含まれず、純粋な Ascii 文字列になります。 (ここでは、最初のコンパイル結果を [STR_ENC1] と呼びます。 [STR_ENC1] にはマルチバイト文字は含まれません)
再度コンパイルした後、サブミットすると、コンテナが受信時に一度自動的にデコードします (コンテナは自動的にそれをデコードします)これを一度デコードすれば、GBK、UTF-8、ISO-8859-1のどれを押しても[STR_ENC1]が正しく取得できます)
その後、プログラム内でdecodeURIComponentを再度実装します(java.net.URLDecoder(*は通常Javaで使用されます) **, "UTF-8")) を使用して、送信するパラメータの元の値を取得します。
その他の関連記事に注目してください。
関連書籍:以上がJSのencodeURI(url)の文字化けを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。