gbk および gb2312 の中国語の文字化け問題に対処するための PHP の json_encode の解決策

高洛峰
リリース: 2016-12-27 16:15:12
オリジナル
1891 人が閲覧しました

この記事では、php の json_encode が gbk と gb2312 の中国語文字化け問題を処理する方法について説明します。具体的な方法は次のとおりです:

1.json_encode() gbk/gb2312 の中国語に対して null を返す

実行結果。 :

$arr = array (
 array (
   'catid' => '4',
   'catname' => 'www.jb51.net',
   'meta_title' => '脚本之家'
  )
);
  
echo json_encode($arr);
ログイン後にコピー

"meta_title":null を見てみましょう。 元々は "Script Home" の値を持っていました。 確認したところ、原則として json_encode は uft-8 エンコーディングのみをサポートしています。

[{"catid":"4","catname":"www.jb51.net","meta_title":null}]
ログイン後にコピー


2. バックグラウンドの PHP ページ (ページが UTF-8 としてエンコードされているか、文字が UTF-8 に変換されている) は、json_encode を使用して PHP の配列を JSON 文字列に変換します。例:

<?php
$data="JSON中文";
$newData=iconv("GB2312″,"UTF-8//IGNORE",$data);
echo $newData;
//ignore的意思是忽略转换时的错误,如果没有ignore参数,所有该字符后面的字符都不会被保存。
//或是("GB2312″,"UTF-8″,$data);
?>
ログイン後にコピー

出力結果を次のように表示します:

<?php
$testJSON=array(&#39;name&#39;=>&#39;中文字符串&#39;,&#39;value&#39;=>&#39;test&#39;);
echo json_encode($testJSON);
?>
ログイン後にコピー

UTF8でエンコードされた文字を使用しても、json_encodeでも中国語文字化けが発生することがわかります。解決策は、json_encode を使用する前に関数 urlencode() で文字を処理し、次に json_encode を使用してから、結果を出力するときに関数 urldecode() を使用して文字を変換することです。詳細は次のとおりです:

{"name":"u4e2du6587u5b57u7b26u4e32″,"value":"test"}
ログイン後にコピー

出力結果を次のように表示します:

<?php
$testJSON=array(&#39;name&#39;=>&#39;中文字符串&#39;,&#39;value&#39;=>&#39;test&#39;);
//echo json_encode($testJSON);
foreach ( $testJSON as $key => $value ) {
$testJSON[$key] = urlencode ( $value );
}
echo urldecode ( json_encode ( $testJSON ) );
?>
ログイン後にコピー

概要: json_encode 関数は、中国語の場合、バイトを適切に処理できない可能性があります。中国の gbk と uft 長さが異なるため、詳細は説明しません。

gbk および gb2312 中国語の文字化け問題に対処するための PHP の json_encode に関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート