いくつかの特殊文字の表示効果のため、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_ARSET, VAR_E_E Xport ($ arr, true) . ';'));
原理は非常に単純です。var_export は 2 番目のパラメータを true に設定し、配列のプロトタイプ文字列を返し、その文字列を utf-8 エンコーディングに変換してから、eval を使用して戻り値を実行します (匿名関数と同様?)。完璧に問題。
フォローアップ: その後、より良い方法があるかどうかを確認するためにインターネットで情報を検索しました。見つかったものはどれも似たようなもので、配列の要素数が多すぎたり、次元が多すぎると、パフォーマンスが低下します。ネイティブ コード方式の方が優れており、N 次元配列であるか連想配列であるかを考慮する必要がなく、配列変換の前後でデータの一貫性が保証されます。 。コードの長さとループとネイティブ メソッドの比較から判断すると、誰もがすでに選択肢を持っていると思います。
http://www.bkjia.com/PHPjc/740207.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/740207.html
技術記事
一部の特殊文字の表示効果のため、Ajax テクノロジの使用により、エンコード変換という古い問題が発生し、通常の UTF-8 プロジェクトを GBK に変更する必要がありました。フォームの検証...