00001 <?php
00002
00015
00016
00017
00018 class Transcoder {
00020 var $fromEncoding;
00021
00023 var $toEncoding;
00024
00026 var $translit;
00027
00034 function Transcoder($fromEncoding, $toEncoding, $translit = false) {
00035 $this->fromEncoding = $fromEncoding;
00036 $this->toEncoding = $toEncoding;
00037 $this->translit = $translit;
00038 }
00039
00045 function trans($string) {
00046
00047 $mbstring = function_exists('mb_convert_encoding');
00048 $iconv = function_exists('iconv');
00049
00050
00051
00052
00053 if ($this->toEncoding == 'HTML-ENTITIES' && !$mbstring) {
00054
00055 if ( strtoupper($this->fromEncoding) == 'UTF-8' ) {
00056 return String::utf2html($string);
00057 } else {
00058
00059 if ($string == html_entity_decode($string, ENT_COMPAT, $this->fromEncoding)) {
00060 return htmlentities($string, ENT_COMPAT, $this->fromEncoding);
00061 } else {
00062 return $string;
00063 }
00064 }
00065
00066 } elseif ($this->fromEncoding == 'HTML-ENTITIES' && !$mbstring) {
00067
00068 if ( strtoupper($this->toEncoding) == 'UTF-8' ) {
00069
00070 return String::html2utf($string);
00071
00072 } else {
00073
00074 return html_entity_decode($string, ENT_COMPAT, $this->toEncoding);
00075 }
00076
00077
00078
00079 } elseif ($this->translit == true && $iconv) {
00080
00081 return iconv($this->fromEncoding, $this->toEncoding . '//TRANSLIT', $string);
00082
00083 } elseif ($this->translit == true && $this->fromEncoding == "UTF-8" && $this->toEncoding == "ASCII") {
00084
00085 return String::html2utf(String::html2ascii(String::utf2html($string)));
00086
00087
00088
00089 } elseif ($mbstring) {
00090
00091
00092 return call_user_func_array('mb_convert_encoding', array(&$string, $this->toEncoding, $this->fromEncoding));
00093
00094 } elseif ($iconv) {
00095
00096 return iconv($this->fromEncoding, $this->toEncoding . '//IGNORE', $string);
00097
00098 } else {
00099
00100 return $string;
00101 }
00102 }
00103 }
00104
00105 ?>