http://d.hatena.ne.jp/seto-san/20081203/1228274418
にありました。
以下引用。(クラスメソッドとして記述してあるので、通常の関数として使用したい場合は)
$target[$key] = $this->_mbConvertEncodingEx($val,$toEncoding,$fromEncoding); ↓ $target[$key] = _mbConvertEncodingEx($val,$toEncoding,$fromEncoding);
とするとよいでしょう。
/**
* mb_convert_encoding()の拡張
*
* @param mixed $target arrayかstring
* @param string $toEncoding エンコード先
* @param string $fromEncoding エンコード元(default:null)
* @return mixed arrayが来たらarrayを、stringが来たらstringを
*/
function _mbConvertEncodingEx($target, $toEncoding, $fromEncoding = null)
{
if (is_array($target)) {
foreach ($target as $key => $val) {
if (is_null($fromEncoding)) {
$fromEncoding = mb_detect_encoding($val);
}
$target[$key] = $this->_mbConvertEncodingEx($val,$toEncoding,$fromEncoding);
}
} else {
if (is_null($fromEncoding)) {
$fromEncoding = mb_detect_encoding($target);
}
$target = mb_convert_encoding($target, $toEncoding,$fromEncoding);
}
return $target;
}