/** * Convert a foreign charset encoding from or to UTF-8 */ function convert($string, $encoding = NULL, $destination = 'UTF-8') { if (!$encoding) { $encoding = utf8::detect($string); } if ($encoding == $destination) { return $string; } if (!empty($this->mb_sets)) { $encode_mb = array_key_exists($encoding, $this->mb_sets); $dest_mb = array_key_exists($destination, $this->mb_sets); if ($encode_mb && $dest_mb) { @mb_substitute_character('none'); return mb_convert_encoding($string, $destination, $encoding); } } else { $encode_mb = $dest_mb = false; } $encode_iconv = array_key_exists($encoding, $this->iconv_sets); $dest_iconv = array_key_exists($destination, $this->iconv_sets); if ($encode_iconv && $dest_iconv) { return @iconv($encoding, $destination . '//IGNORE', $string); } // must use mixed conversion @mb_substitute_character('none'); if ($encode_mb) { $instring = mb_convert_encoding($string, 'UTF-8', $encoding); } else { if ($encode_iconv) { $instring = @iconv($encoding, 'UTF-8' . '//IGNORE', $string); } else { $instring = $string; } } if ($dest_mb) { $outstring = mb_convert_encoding($string, $destination, 'UTF-8'); } else { if ($dest_iconv) { $outstring = @iconv('UTF-8', $destination . '//IGNORE', $string); } else { $outstring = $string; } } return $outstring; }