PHP 配列のエンコード変換
一部の特殊文字の表示効果により、ajax テクノロジーを使用しているため、従来の問題であるエンコード変換も必要になりました。
一部のフォーム検証では json データを返す必要があります。PHP の json_encode 関数は utf-8 エンコーディングのみをサポートしているため、目的の効果は GBK 配列を utf-8 配列に変換して渡すことです。 json_encode 関数。
最初のアイデアは、配列をシリアル化し、iconv 関数を使用してエンコーディングを変換し、それを逆シリアル化することです。コードは次のとおりです。
unserialize(iconv('gbk','utf-8',serialize($array)));得られた結果は空白でした。後で、デフォルトのエンコーディング ini_set('default_charset', 'gbk'); が utf-8 文字列を逆シリアル化するのに使用するのは簡単ではないことを思い出しました。シリアル化と逆シリアル化の間に ini_set('default_charset', 'utf-8'); を追加することもできるはずですが、これはグローバルなエンコード設定であり、エラーが発生しやすいため、これを行うのは常に少し面倒に感じます。データベース操作などのコーディングの問題。次に、気が変わって、var_export 関数を使用して配列プロトタイプを構築するシリアル化メソッドを使用します。最終的な関数は次のとおりです。
function array_iconv($in_charset,$out_charset,$arr){ return eval('return '.iconv($in_charset,$out_charset,var_export($arr,true).';')); }
フォローアップ: その後、より良い方法があるかどうかを確認するためにインターネットで情報を検索しました。見つかったものはどれも似たようなもので、配列の要素が多すぎる場合や次元が多すぎる場合は、パフォーマンスは確実に良くありません。何が起こっているのでしょうか? データの一貫性を確保するために、N 次元配列であるか連想配列であるかを考慮する必要はありません。配列の変換前と変換後。コードの長さとループとネイティブ メソッドの比較から判断すると、誰もがすでに選択肢を持っていると思います。