ホームページ >バックエンド開発 >PHPの問題 >php ajaxで値が文字化けする問題を解決する方法

php ajaxで値が文字化けする問題を解決する方法

藏色散人
藏色散人オリジナル
2020-09-01 10:31:352587ブラウズ

php Ajax によって渡される値が文字化けする場合の解決策: 1. 表裏ページとデータベースに UTF8 エンコーディングを使用する; 2. 保存時に "mysql_query("set names gb2312");" メソッドを使用する3. 、ICONV 関数を使用して、データベースから取得した文字列のエンコーディングを変換します。

php ajaxで値が文字化けする問題を解決する方法

推奨事項: 「PHP ビデオ チュートリアル

PHP Web サイト開発では、ユーザー エクスペリエンスを向上させるために、Ajaxよく使われる技術ですが、初心者にとってAjaxで値を転送する際に文字化けが起こることがよくありますが、PHP AJAXで値を転送する際の漢字化けを解決する方法はあるのでしょうか?

Ajax 技術は JavaScript から発展したものであり、JavaScript では UTF-8 エンコードが使用されていますが、現在の背景ページが GBK などのエンコードを使用しており、エンコード変換が行われていない場合、中国語の文字化けの問題が発生します。

PHP Ajax 値転送 漢字化け解決方法

方法 1. 表裏ページとデータベースを統一して UTF8 エンコードを使用する最も簡単な方法です。

方法 2: Web サイトが GBK/GB2312 などのエンコーディングを採用している場合、次の 2 つの状況が考えられます。

1. Ajax が漢字を送信し、PHP (バックエンド プログラム) が文字化けを受信する場合、 GBK と UTF8 間の変換関数を使用して、受信した文字列のエンコーディングを変換し、関連するデータベースに格納します。データベースで使用されるエンコーディングは GBK または GB2312 であると想定されます。設定された PHP 実行環境が ICONV 関数をサポートしている場合, ICONV 関数を使用することもできます。エンコーディング変換してから

mysql_query("set names gb2312");

を実行すると、データベースに保存するときに Ajax 値を転送するときに中国語で文字化けする問題を解決できます。

2. PHP が中国語の文字を送信し、Ajax (フロント ページ) が文字化けを受信する場合、ICONV 関数を使用してデータベースから取得した文字列のエンコーディングを変換し、その値を Ajax に渡すこともできます。フロントデスク、つまり responseText 。または、PHP (バックエンド プログラム) 出力文字ストリームの前に

header('Content-type: text/html;charset=gb2312');

を追加します。特記事項:Ajaxを多階層連携(県と市の連携など)に使用する場合は、XML対話形式を使用し、XML出力前にヘッダーを追加する必要があります。

同時にGB2312とUTF8の変換機能も掲載し、Ajaxの中国語文字化け問題に遭遇した際にどなたでも別の解決策が得られるようにしました。

function gb2utf8($gb,$filename)
{
    if(!trim($gb))
    return $gb;
    //$filename="gb2312.txt";
    $tmp=file($filename);
    $codetable=array();
    while(list($key,$value)=each($tmp))
    $codetable[hexdec(substr($value,0,6))]=substr($value,7,6);
    $utf8="";
    while($gb)
    {
        if (ord(substr($gb,0,1))>127)
        {
            $thisgb=substr($gb,0,2);
            $gb=substr($gb,2,strlen($gb));
            $utf8.=u2utf8(hexdec($codetable[hexdec(bin2hex($thisgb))-0x8080]));
        }
        else
        {
            $gb=substr($gb,1,strlen($gb));
            $utf8.=u2utf8(substr($gb,0,1));
        }
    }
    $ret="";
    for($i=0;$i<strlen($utf8);$i+=3)
    $ret.=chr(substr($utf8,$i,3));
    return $ret;
}
function u2utf8($c)
{
    for($i=0;$i<count($c);$i++)
    $str="";
    if ($c < 0x80) {
        $str.=$c;
    }
    else if ($c < 0x800) {
        $str.=(0xC0 $c>>6);
        $str.=(0x80 $c & 0x3F);
    }
    else if ($c < 0x10000) {
        $str.=(0xE0 $c>>12);
        $str.=(0x80 $c>>6 & 0x3F);
        $str.=(0x80 $c & 0x3F);
    }
    else if ($c < 0x200000) {
        $str.=(0xF0 $c>>18);
        $str.=(0x80 $c>>12 & 0x3F);
        $str.=(0x80 $c>>6 & 0x3F);
        $str.=(0x80 $c & 0x3F);
    }
    return $str;
}

注: この機能には GB2312 中国語エンコーディング テーブルの使用が必要です。ここをクリックしてダウンロードしてください。gb2312 を使用しているため、変換中にまれに文字化けする単語がいくつかある可能性があります。

以上がphp ajaxで値が文字化けする問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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