PHPで配列の「値」をSJISなどからUTF-8などへエンコードしたい場合、mb_convert_variables()
を使えばさくっとエンコードできますよね。
ただ、連想配列の場合、mb_convert_variables()
だと キー名はエンコードされません。
色々調べてみましたが、キー名もエンコードしたい時はforeach
でループさせてゴリ押しするしかなさそうでした...。
そこで、連想配列の値とキー名の両方をUTF-8へエンコードする関数を自作してみたので、備忘録として残しておきます。
連想配列の値とキー名をUTF-8へエンコードする関数
function convertToUTF8( $data ) {
if ( !is_array( $data ) ) {
return mb_convert_encoding( $data, "UTF-8", "UTF-8,SJIS-win,SJIS,ASCII" );
}
foreach ( $data as $key => $value ) {
// キー名をUTF8にエンコード
$reKey = mb_convert_encoding( $key, "UTF-8", "UTF-8,SJIS-win,SJIS,ASCII" );
// エンコード前の要素を削除
unset( $data[$key] );
// 値をエンコードし、エンコード後のキー名に入れ直す
$data[$reKey] = convertToUTF8( $value );
}
return $data;
}
変換前のエンコード形式を指定している"UTF-8,SJIS-win,SJIS,ASCII"
の部分は、その時に合わせて適切な形式のみ選択していただくと良いかなと思います。
使い方は簡単で、UTF-8へエンコードさせたい連想配列を引数にぶち込むだけ。
例:フォームから受け取った全データの値とキー名をUTF-8へエンコード
$P = convertToUTF8($_POST);