Esempio n. 1
0
 /**
  * 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;
 }