最近、久しぶりにShift_JIS文字コードのDBが絡んだWebサイトを扱うことがあったので、その時使った小技を紹介。

キーと値の両方ともShift_JISとなっている連想配列を、一気にUTF-8へ変換するコードがこちら。

foreach($data as $key => $val) { 
  $newKey = mb_convert_encoding($key, 'UTF-8', 'SJIS'); 
  unset($data[$key]); 
  $data[$newKey] = mb_convert_encoding($val, 'UTF-8', 'SJIS'); 
}

foreachでループ処理をかけ、一度文字コード変換後のキーを変数に保存。

それから元のキーを削除し、先に保存したおいた変換後のキーを振り直した配列に文字コードを変換した値を代入する。

これでキー・値のいずれもUTF-8に変換することができる。