インターネット技術の発展に伴い、Ajax 技術を使用して Web ページ上で動的な対話を実現する Web サイトがますます増えています。最も人気のある JavaScript ライブラリである jQuery は、多くの Web サイトで最初に選択されるものでもあります。ただし、jQuery の Ajax を使用して POST リクエストを送信すると、多くの開発者は中国語パラメータの文字化けという非常に厄介な問題に遭遇することになります。この記事では、この問題の原因と解決策について説明します。
POST リクエストを送信するとき、jQuery の Ajax メソッドはデフォルトでパラメータを「application/x-www-form-urlencoded」形式でシリアル化し、バックエンドに送信します。 。この形式は比較的シンプルで、ブラウザ間で最も互換性があります。ただし、パラメータに漢字が含まれる場合は文字化けが発生します。これは、この形式が中国語をサポートしておらず、中国語を正しく送信するには URL エンコードとエスケープが必要なためです。
この問題を解決するには、jQuery が提供する別のデータ形式「multipart/form-data」を使用することを検討できます。この形式は中国語をサポートしていますが、この形式を使用する場合、リクエスト ヘッダーには「Content-Type: multipart/form-data; border=----XXXXXX」が含まれるため、ブラウザが自動的にバックエンドによるパラメータ値の解析を妨げる可能性がある区切り文字。
上記の問題に対応するには、次の 3 つの解決策を使用できます。
パラメータ送信時に URL を手動でエンコードする、URL を手動でエンコードし、バックエンドでデコードできます。パラメータは、JavaScript の encodeURIComponent() メソッドを使用してエンコードできます。例:
$.ajax({ type:'POST', url:url, data: {'name':encodeURIComponent('张三'),'age':20}, success:function(data){ console.log(data); } });
バックエンドでは、Java の URLDecoder.decode() メソッドを使用してデコードします:
String name = URLDecoder.decode(request.getParameter("name"), "UTF-8"); int age = Integer.parseInt(request.getParameter("age"));
このメソッドはより面倒で、フロントエンドとバックエンドの両方でエンコードおよびデコード操作が必要です。 。
リクエスト ヘッダーを変更し、「Content-Type」を「application/json;charset=utf-8」に変更し、JSON 形式を使用して、データを送信します。例:
$.ajax({ type:'POST', url:url, contentType: "application/json;charset=utf-8", data: JSON.stringify({'name':'张三','age':20}), success:function(data){ console.log(data); } });
バックエンドで、Java の JsonParser を使用して JSON を解析します:
JsonParser parser = new JsonParser(); JsonObject object = parser.parse(json).getAsJsonObject(); String name = object.get("name").getAsString(); int age = object.get("age").getAsInt();
このメソッドは比較的単純ですが、JSON 形式でデータを送信する場合にのみ適しています。
バックエンドで PHP を使用している場合は、エンコードやデコードを行わずに、$_POST または $_REQUEST を直接使用してパラメーター値を取得できます。例:
$name = isset($_POST['name']) ? $_POST['name'] : ''; $age = isset($_POST['age']) ? intval($_POST['age']) : 0;
バックエンドが Java を使用している場合は、HttpServletRequest の getInputStream() メソッドを使用してパラメータ値を取得できます。例:
StringBuilder sb = new StringBuilder(); BufferedReader bufferedReader = null; try { InputStream inputStream = request.getInputStream(); bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); String line = null; while((line = bufferedReader.readLine()) != null) { sb.append(line); } } catch (IOException e) { e.printStackTrace(); } finally { if(bufferedReader != null) { try { bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } }
次に、JsonParser を使用して JSON 形式のデータを解析することも、application/x-www-form-urlencoded 形式のデータを手動で解析することもできます。
つまり、それぞれの方法には独自の長所と短所があり、特定の状況に応じて最適な方法を選択できます。どちらの方法を使用する場合でも、文字化けを避けるために中国語パラメータのエンコードとデコードに注意する必要があります。
以上がjquery ajaxパラメータが文字化けした場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。