ホームページ  >  記事  >  バックエンド開発  >  json_decode()_PHP チュートリアルを使用して、PHP の GBK/GB2312 ページで中国語が失われる問題の解決策

json_decode()_PHP チュートリアルを使用して、PHP の GBK/GB2312 ページで中国語が失われる問題の解決策

WBOY
WBOYオリジナル
2016-07-13 10:49:121041ブラウズ

php では、json_decode() 関数は配列を json 形式のデータに変換できますが、json_decode() 関数は UTF-8 と ASCII エンコードのみをサポートします。gkb の場合は問題が発生します。分析と解決策。

json_decode() を使用して配列/オブジェクトを JSON 文字列にシリアル化する場合、基本的には UTF-8/ASCII エンコーディングのみをサポートしているようです。一部のサイトでは GBK/GB2312 エンコーディングを使用しています。現時点では、json_encode/json_decode を直接使用すると問題が発生する可能性があります。

コードは次のとおりです コードをコピー

$json = '{"a":"中国人"}';
var_dump(json_decode($json));
?>

結果

{"テキスト":null,"ステータス":1}

例えば、漢字を含む文字をnull(ヌル)に変換する場合、gbエンコードを使用してjson_decode()を使用して変換する必要がある場合がありますか?何をするか?昨夜、データベースを使用せずに音楽を追加するための小さな背景を書きました。つまり、php を使用して音楽を追加し、xml メニューを生成します。データベースを使用しない場合は、データを保存する方法を使用する必要があります。テキストとして保存したデータを直接使用するには、json_decode() を使用して配列を json 形式に変換することだと思います。使用する場合は、それを取り出して json_encode を使用して配列に変換することができます (おそらく js にはあります)。最近 json に置き換えられましたが、serialize() や unserialize()) を使用するなど、配列をシリアル化するより良い方法があるようです。本題に戻りましょう。 json_decode() は中国語を gb エンコードに変換できないため、まず中国語を英語エンコードに変換します。次に、この urlencode() を使用してエンコーディングを変換し、 json_decode() 変換を行うことができます。使用するときは、urldecode()を使用して中国語に変換するだけです

コードは次のとおりです コードをコピー

/*
GBK 文字列のトランスコーディングは UTF-8 に変換され、数値は数値に変換されます。
*/
関数 ct2($s){
If(is_numeric($s)) {
return intval($s);
} その他 {
return iconv("GBK","UTF-8",$s);
}
}
/*
バッチ処理 gbk->utf-8
*/
関数 icon_to_utf8($s) {
if(is_array($s)) {
foreach($s as $key => $val) {
$s[$key] = icon_to_utf8($val);
}
} その他 {
$s = ct2($s);
}
$s を返します;
}
echo json_encode(icon_to_utf8("アモイ"));

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632733.html技術記事 phpでは、json_decode()関数で配列をjson形式のデータに変換できますが、json_decode()関数はUTF-8とASCIIエンコードのみをサポートしています。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。