最近インターネットでjson_encodeエンコードをUTF-8中国語に設定すると文字化けしないことを確認しました。この方法が確かに効果的であることはわかりますが、しばらく使用するとコードがうまく動作しなくなるのはなぜでしょうか。以下は、json_encode に対する私自身の解決策です。もっと良い方法がある場合は、ぜひ共有してください。
最初のタイプ:
これは単純なコード変換であり、urlcode の後に必要な配列を返します
私のコードにはこれで十分です。
コードは次のとおりです コードをコピーします
public static function encodeOperations ($array)
{
foreach ((array)$array as $key => $value) {
if (is_array($value)) {
encodeOperations($array[$key]);
} 他 {
$array[$key] = urlencode(mb_convert_encoding($value,'UTF-8','GBK'));
}
}
$array を返す;
}
2 番目のタイプ:
これをインターネットで見たところ、無限ループの問題が発生するというコメントがありましたが、これは明らかに非常に包括的なものであり、テストした結果、参考のためにのみここに投稿します
。 コードは次のとおりです コードをコピーします
/*************************************************** * **********
*
* 特定の関数を使用して配列内のすべての要素を処理します
* @param string &$array 処理対象の文字列
* エンコード後の @param string $tocode
* エンコード前の@param string $oldcode
* @param string $function 実行される関数
* @return boolean $apply_to_keys_only キーにも適用されるかどうか
* @return array $array keyにも適用されるかどうか
* @アクセス公開
*
************************************************ **************/
関数 encodeOperations (&$array, $function, $tocode=false,$oldcode=false,$apply_to_keys_only = false)
{
foreach ($array as $key => $value) {
(www.111cn.net)
if (is_array($value)) {
encodeOperations($array[$key], $function, $apply_to_keys_only);
} 他 {
if($tocode&&$oldcode) {
if(function_exists(mb_convert_encoding)) {
$value = mb_convert_encoding($value,$tocode,$oldcode);
}その他{
「エラー」を返す;
}
}
$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]);
}
}
}
$array を返す;
}
/****出典:http://www.111cn.net/phper/31/66729.htm**************************** ******* *********************************
*
* 配列を JSON 文字列に変換します (中国語と互換性があります)
* @param array $array 変換される配列
* @return 文字列を変換した JSON 文字列
* @アクセス公開
*
************************************************ ************/
関数 JSON($array) {
arrayRecursive($array, 'urlencode', true);
$json = json_encode($array);
urldecode($json) を返す;
}
中国語で null が返された場合は、文字を uft8 に変換するか、urlencode を使用して最初にコンパイルする必要があります。