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 関数を使用してエンコードを変換し、それをデータベースに保存することもできます
1
|
mysql_query("set names gb2312"); |
1
|
mysql_query(
"セット名 gb2312")
;
1
|
header('Content-type: text/html;charset=gb2312'); |
|
は、Ajax 値転送における中国語の文字化けの問題を解決できます。
2. PHP が中国語の文字を送信し、Ajax (フロント ページ) が文字化けを受信した場合、ICONV 関数を使用してデータベースから取得した文字列のエンコーディングを変換し、その値を Ajax フロント デスクに渡すこともできます。つまり、responseText です。または、PHP (バックグラウンド プログラム) 出力文字ストリームの前に を追加します。
1
|
ヘッダー('Content-type: text/html;charset=gb2312'); |
それだけです。 特に注意事項: XML インタラクション形式を使用した多層連携(県と市の連携など)に Ajax を使用する場合、XML を出力する前にヘッダーも追加する必要があります。
同時に GB2312 と UTF8 の変換機能も掲載しており、Ajax の中国語文字化け問題に遭遇した際に、どなたでも別の解決策を得ることができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
関数 gb2utf8($gb,$ファイル名 )
{
if(!トリム($gb) )
戻る
$gb;
//$filename="gb2312.txt";
$tmp=ファイル($filename);
$codetable=array();
while(list($key,$value)=それぞれ($tmp))
$codetable[hexdec(substr($value、0、6))] =substr($value,7, 6);
$utf8 ="";
その間 ($gb)
{
場合
(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]));
}
その他
{
$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));
戻る
$ret;
}
関数 u2utf8($c)
{
for($i=0;$i<カウント($c);$i ++)
$str="";
場合
($c
0x80)
{
$str.=$c;
}
その他
場合
($c
0x800)
{
$str.=(0xC0
$c>>6);
$str.=(0x80
$c
&
0x3F);
}
その他
場合
($c
0x10000)
{
$str.=(0xE0
$c>>12);
$str.=(0x80
$c>>6
&
0x3F);
$str.=(0x80
$c
&
0x3F);
}
その他
場合
($c
0x200000)
{
$str.=(0xF0
$c>>18);
$str.=(0x80
$c>>12
&
0x3F);
$str.=(0x80
$c>>6
&
0x3F);
$str.=(0x80
$c
&
0x3F);
}
戻る
$str;
} |
注: この関数は GB2312 中国語コード テーブルを使用する必要があります。GB2312 を使用しているため、移行時に発生するコードは乱雑なコードになる可能性があります。
注:PHP ウェブサイト公開教程-leapsoul.cn 版すべて、ダウンロード時間は接続形式注釈原初出および本指示、谢。