ホームページ  >  記事  >  バックエンド開発  >  PHP配列エンコード変換

PHP配列エンコード変換

WBOY
WBOYオリジナル
2016-06-13 12:55:57974ブラウズ

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).';'));  
}  

原理は非常に単純です。var_export は 2 番目のパラメータを true に設定し、配列のプロトタイプ文字列を返し、その文字列を utf-8 エンコーディングに変換してから、eval を使用して戻り値を実行します (匿名関数と似ていますか?)。問題を完璧に解決します。

フォローアップ: その後、より良い方法があるかどうかを確認するためにインターネットで情報を検索しました。見つかったものはどれも似たようなもので、配列の要素が多すぎる場合や次元が多すぎる場合は、パフォーマンスは確実に良くありません。何が起こっているのでしょうか? データの一貫性を確保するために、N 次元配列であるか連想配列であるかを考慮する必要はありません。配列の変換前と変換後。コードの長さとループとネイティブ メソッドの比較から判断すると、誰もがすでに選択肢を持っていると思います。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。