ホームページ >バックエンド開発 >PHPチュートリアル >PHP JSON_DECODE/JSON_ENCODE 中国語のコンテンツが NULL または文字化けする_PHP チュートリアル

PHP JSON_DECODE/JSON_ENCODE 中国語のコンテンツが NULL または文字化けする_PHP チュートリアル

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

json データを使用するときに中国語コンテンツを処理するために PHP の組み込み関数 JSON_DECODE/JSON_ENCODE を使用すると、多くの友人が NULL または文字化けコードの問題に遭遇する可能性があります。そのような問題が発生する理由を紹介します。

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

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json));
var_dump(json_decode($json, true));

?>

結果を出力する

オブジェクト(stdClass)#1 (5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}

配列(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}

問題なく正解です。それでは中国語をテストしてみましょう

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

$json = '{"a":"中国人"}';

var_dump(json_decode($json));

?>

結果

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

後でphpのマニュアルを見て、json_encodeとjson_decodeはutf-8エンコードされた文字のみをサポートしていることがわかりました。jsonを使用したい場合はGBK文字を変換する必要があるため、簡単に処理できます

エンコーディングを変換する

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

/*
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("アモイ"));

これは依然として問題を引き起こすことがあります。その後、urlencode() を使用して json_encode の前にすべての配列の内容を処理し、次に json_encode() を使用してそれを JSON 文字列に変換し、最後に urldecode() を使用してエンコードする方法を見つけました。渡した中国語を転送してください。

関数を書く

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

/*************************************************** * **********
*
* 特定の関数を使用して配列内のすべての要素を処理します
* @param string &$array 処理対象の文字列
* @param string $function 実行する関数
* @return boolean $apply_to_keys_only キーにも適用されるかどうか
* @アクセス公開
*
************************************************* * ***********/
function arrayRecursive(&$array, $function, $apply_to_keys_only = false)
{
foreach ($array as $key => $value) {
If (is_array($value)) {
arrayRecursive($array[$key], $function, $apply_to_keys_only);
} else {
$array[$key] = $function($value);
}

if ($apply_to_keys_only && is_string($key)) {
$new_key = $function($key);
If ($new_key != $key) {
$array[$new_key] = $array[$key];
unset($array[$key]);
}
}
}
}

/*************************************************** * **********
*
* 配列を JSON 文字列に変換します (中国語と互換性があります)
* @param array $array 変換する配列
* @return string 変換されたjson文字列
* @アクセス公開
*
************************************************* * ***********/
関数 JSON($array) {
arrayRecursive($array, 'urlencode', true);
$json = json_encode($array);
urldecode($json)を返します;
}

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632125.html技術記事多くの友人は、中国語コンテンツを処理するために PHP に付属する関数 JSON_DECODE/JSON_ENCODE を使用して JSON データを使用するときに、NULL または文字化けコードの問題に遭遇する可能性があります。その理由をご紹介します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。