ホームページ >バックエンド開発 >PHPの問題 >PHP ajax で中国語の文字化けが送信される場合の対処方法

PHP ajax で中国語の文字化けが送信される場合の対処方法

PHPz
PHPzオリジナル
2023-04-19 10:04:34855ブラウズ

PHP と AJAX を組み合わせて開発を行っていると、中国語の送信時に文字化けが発生するというよくある問題に遭遇することがあります。これは、PHP で使用されるデフォルトのエンコード方式が ISO-8859-1 であるのに対し、AJAX で使用されるデフォルトのエンコード方式は UTF-8 であり、両者に互換性がないため、送信時に文字化けが発生します。この記事では、PHPやAJAXで送信される中国語の文字化けの問題を解決する方法を紹介します。

1. AJAX リクエストが文字化けしたコードを送信する

AJAX は、フロント エンドとバック エンド間の非同期対話のためのソリューションです。AJAX を通じて、ページを更新せずにリクエストをバックエンドに送信できます。 、バックエンドから返されたデータを受信できます。中国語送信にAJAXを使用すると文字化けが発生する場合があります。

たとえば、次の単純な AJAX リクエスト:

$.ajax({
    url: "test.php",
    type: "POST",
    data: { name: "张三", age: 20 },
    success: function (result) {
        console.log(result);
    }
});

上記のコードでは、POST リクエストを test.php に送信し、「名前」「Zhang San」、データを渡しました。 「年齢」は20歳。しかし、バックエンドでこのリクエストパラメータを受け取ると中国語の文字化けが発生します。

この問題の解決策は非常に簡単で、AJAX リクエストを送信する前にデータを UTF-8 エンコードに変換するだけです。上記のコードを次のように変更します。

$.ajax({
    url: "test.php",
    type: "POST",
    data: { name: encodeURIComponent("张三"), age: 20 },
    success: function (result) {
        console.log(result);
    }
});

上記のコードでは、中国語の文字化けを避けるために、encodeURIComponent を使用して「name」をエンコードし、中国語を UTF-8 エンコードに変換します。

2. PHP は UTF-8 エンコードされたデータを受信します

前の章では、AJAX リクエストでエンコード変換を実行する方法を紹介しましたが、この UTF-8 エンコードをバックエンドで受け取る方法は次のとおりです。 PHP データはどうでしょうか?

PHP では、$_POST を通じて POST リクエストのパラメーターを取得できます。ただし、デフォルトでは、PHP で使用されるエンコード方式は ISO-8859-1 であり、UTF-8 エンコードと互換性がないため、データを取得するときに対応するエンコード変換を実行する必要があります。

test.php ファイルを次のように変更します。

<?php
    header(&#39;Content-Type:text/html;charset=utf-8&#39;);//设置响应头为utf-8编码
    $name = $_POST["name"];
    $name = iconv("utf-8","gbk",$name);//将数据由utf-8编码转为gbk编码
    echo $name;
?>

上記のコードでは、まず応答ヘッダーを UTF-8 エンコーディングに設定し、次に $_POST を通じてパラメーターを取得し、最後に使用します。 iconv 関数 UTF-8 でエンコードされたパラメータを GBK エンコードに変換して、中国語の文字化けを回避します。

3. JSON で中国語の文字化けを転送する

実際のアプリケーションでは、通常、JSON 形式でデータを転送します。 JSON 経由で中国語を送信する場合は、エンコードの問題にも注意する必要があります。

たとえば、次の単純な JSON データ:

var data = {
    name: "张三",
    age: 20
};

上記のコードでは、「name」属性と「age」属性を含む JSON データを定義します。「name」は中国語です。張三」。

JSON データをバックエンド PHP に渡すときは、データもエンコードして変換する必要があります。上記のコードを次のように変更します。

var data = {
    name: encodeURIComponent("张三"),
    age: 20
};

上記のコードでは、中国語の文字化けを避けるために、encodeURIComponent を使用して「name」をエンコードし、中国語を UTF-8 エンコードに変換します。

バックエンド PHP では、対応するエンコード変換も必要です。 test.php ファイルを次のように変更します。

<?php
    $data = isset($GLOBALS[&#39;HTTP_RAW_POST_DATA&#39;]) ? $GLOBALS[&#39;HTTP_RAW_POST_DATA&#39;] : file_get_contents(&#39;php://input&#39;);//获取JSON数据
    $data = json_decode($data,true);//将JSON数据解码为数组
    $name = $data["name"];
    $name = iconv("utf-8","gbk",$name);//将数据由utf-8编码转为gbk编码
    echo $name;
?>

上記のコードでは、まず $GLOBALS['HTTP_RAW_POST_DATA'] または file_get_contents('php://input') を通じて JSON データを取得し、次に使用します。 json_decode to JSON データは配列にデコードされ、最後に iconv 関数を使用して、UTF-8 でエンコードされたパラメーターを GBK エンコードに変換し、中国語の文字化けを回避します。

4. 概要

PHP と AJAX を組み合わせて開発する場合、中国語の送信時に文字化けが発生することがあります。この問題を解決するには、データをエンコードして、PHP のデフォルトのエンコードと互換性を持たせる必要があります。データ転送に JSON を使用する場合は、エンコードの問題にも注意する必要があります。この記事の紹介を通じて、PHP および AJAX で送信される中国語の文字化けの問題を読者の皆様が解決する一助になれば幸いです。

以上がPHP ajax で中国語の文字化けが送信される場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。