JS の encodeURIComponent 関数で中国語をエンコードした後、php でデコードするにはどうすればよいですか? ?
前提: エンコード前の中国語は gbk、gb2312、utf-8 などである可能性があります。
コードをコピー コードは次のとおりです:
urldecode()
iconv()
JS で encodeURIComponent を使用して中国語をエンコードします。PHP で iconv('UTF-8', 'gb2312', $q); を使用して、実際のアプリケーションに基づいています。 Dingru は、次の記事を読む理由がまだわかりません。
URL エンコード変換、escape() encodeURI() encodeURIComponent()
この記事では、URL エンコードの 3 つの関数を紹介します。 ( )、encodeURIComponent()
escape() メソッド:
ISO ラテン文字セットを使用して指定された文字列をエンコードします。すべてのスペース、句読点、特殊文字、およびその他の非 ASCII 文字は、%xx 形式の文字エンコーディングに変換されます (xx は、文字セット テーブル内の文字エンコーディングの 16 進数と同じです)。たとえば、スペース文字に対応するエンコーディングは です。アンエスケープ方式はその逆です。このメソッドでエンコードされない文字: @ * /
encodeURI() メソッド:
UTF-8 エンコード形式を使用して、URI 文字列をエスケープ形式の文字列に変換します。このメソッドでエンコードされない文字: ! @ # $& * ( ) = : / ? '
encodeURIComponent() メソッド:
UTF-8 エンコード形式を使用して URI 文字列を変換します。フォーマット文字列。 encodeURI() と比較して、このメソッドは / やその他の文字など、より多くの文字をエンコードします。したがって、文字列に URI の複数の部分が含まれている場合、このメソッドを使用してエンコードすることはできません。そうしないと、/ 文字がエンコードされた後で URL にエラーが表示されます。このメソッドでエンコードされない文字: ! * ( )
したがって、中国語の文字列の場合、文字列エンコード形式を UTF-8 形式 (元の文字列など) に変換したくない場合は、 page 文字セットがターゲットページと一致している場合)、エスケープを使用するだけで済みます。ページが GB2312 またはその他のエンコードで、パラメーターを受け入れるページが UTF-8 エンコードされている場合は、encodeURI または encodeURIComponent を使用する必要があります。
注: エスケープ メソッドを使用して、Uniform Resource Identifier (uri) をエンコードすることはできません。これをエンコードするには、encodeuri メソッドと encodeuricomponent メソッドを使用します。また、encodeURI/encodeURIComponentはjavascript1.5以降に導入され、javascript1.0ではエスケープが利用可能になりました。
使用法を要約すると、 1. デフォルトでは、HTTP/POST メソッドはエンコードに「x-www-form-urlencoded」を使用します。 JavaScript の encodeURI としての役割
2. この方法でエンコードされたコンテンツがバックグラウンドに到達すると、その中の文字はすべて UTF-8 エンコーディング形式になります。
3. サーブレットの場合は、Content-Type が指定されます。出力用の JSP は UTF-8 です。これらのパラメータに対して特別なエンコードまたはデコード操作を実行する必要はありません。それ以外の場合は、たとえば、これらのパラメータをデコードする必要があります。ページが GBK エンコードされている場合は、次のように記述する必要があります:
String sPara = new String(request.getParamter("test").getBytes("iso-8859-1"),"GBK")
gb2312 エンコードが使用されている場合は、GBK エンコードも使用できます。
5. Eclipse で作業している場合は、サーブレットおよび JSP ファイルのプロパティに注意してください。エンコードはコンテンツに設定されているものと同じである必要があります。 -type 同じです。そうでない場合、javac はファイルを正しくエンコードしません。このとき、バイトコード ファイル自体の文字列が間違っており、出力は役に立ちません。
6.1。サーブレット/JSP ファイル自体のエンコードは、コンテンツ タイプの出力と一致している必要があります。そうでない場合は、追加のエンコードとデコードの手順を追加する必要があります。
6.2. HTTP/POST メソッドと encodeURI メソッドで渡されるエンコードはすべて、 UTF-8;
6.3. 通常の window.open(...)、つまり HTTP/GET メソッドは、スクリプトを実行しているページのエンコードと一致している必要があります。 iso-8859-1 を渡してデコードし、ターゲット エンコードを使用してエンコードします。
6.5、response.setContentType("text/xml;charset=utf-8");
にエコーされる漢字がある場合ページ、charset= は utf-8 文字を追加する必要があります
request.setCharacterEncoding("UTF-8");//ページが POST 経由で送信され、中国語の文字が含まれている場合は、次の文を追加する必要があります
このステートメントはプログラムの先頭に配置されます。
6.6 プロジェクト属性のエンコードが「UTF-8」であること、およびリクエスト ページとレスポンス ページのエンコードが一貫していることを確認してください (バックグラウンドでも構いません)。ファイル
属性と ContentType 設定が一貫していることを確認する必要があります