'%', '_' => ' ' ) )); } else { $part_string = base64_decode($match[3]); } $lower_encoding = strtolower($match[1]); $last_key = count($part_with_encoding) - 1; if (isset($part_with_encoding[$last_key]) && $part_with_encoding[$last_key]['encoding'] == $lower_encoding) { $part_with_encoding[$last_key]['string'] .= $part_string; } else { $part_with_encoding[] = array('encoding' => $lower_encoding, 'string' => $part_string); } } } else { $last_key = count($part_with_encoding) - 1; if (isset($part_with_encoding[$last_key]) && $part_with_encoding[$last_key]['encoding'] == 'iso-8859-1') { $part_with_encoding[$last_key]['string'] .= $part; } else { $part_with_encoding[] = array('encoding' => 'iso-8859-1', 'string' => $part); } } } foreach ($part_with_encoding as $part) { $output .= $this->iconv($part['encoding'], 'UTF-8', $part['string']); } return $output; } /** * This works around a bug in MAMP 1.9.4+ and PHP 5.3 where iconv() * does not seem to properly assign the return value to a variable, but * does work when returning the value. * * @param string $in_charset The incoming character encoding * @param string $out_charset The outgoing character encoding * @param string $string The string to convert * @return string The converted string */ protected function iconv($in_charset, $out_charset, $string) { return iconv($in_charset, "$out_charset//IGNORE", $string); } }