* @version 0.1.0 */ /** * Convert a string from any of various encodings to UTF-8 * * @param string String to encode *[@param string Encoding; Default: ISO-8859-1] *[@param bool Safe Mode: if set to TRUE, the original string is retunred on errors] * @return string The encoded string or false on failure * @since 0.0.1 */ function encode_utf8($string = '', $encoding = 'iso-8859-1', $safe_mode = false) { $safe = ($safe_mode) ? $string : false; if (strtoupper($encoding) == 'UTF-8' || strtoupper($encoding) == 'UTF8') { return $string; } elseif (strtoupper($encoding) == 'ISO-8859-1') { return utf8_encode($string); } elseif (strtoupper($encoding) == 'WINDOWS-1252') { return utf8_encode(map_w1252_iso8859_1($string)); } elseif (strtoupper($encoding) == 'UNICODE-1-1-UTF-7') { $encoding = 'utf-7'; } if (function_exists('mb_convert_encoding')) { $conv = @mb_convert_encoding($string, 'UTF-8', strtoupper($encoding)); if ($conv) return $conv; } if (function_exists('iconv')) { $conv = @iconv(strtoupper($encoding), 'UTF-8', $string); if ($conv) return $conv; } if (function_exists('libiconv')) { $conv = @libiconv(strtoupper($encoding), 'UTF-8', $string); if ($conv) return $conv; } return $safe; } /** * Convert a string from UTF-8 to any of various encodings * * @param string String to decode *[@param string Encoding; Default: ISO-8859-1] *[@param bool Safe Mode: if set to TRUE, the original string is retunred on errors] * @return string The decoded string or false on failure * @since 0.0.1 */ function decode_utf8($string = '', $encoding = 'iso-8859-1', $safe_mode = false) { $safe = ($safe_mode) ? $string : false; if (!$encoding) $encoding = 'ISO-8859-1'; if (strtoupper($encoding) == 'UTF-8' || strtoupper($encoding) == 'UTF8') { return $string; } elseif (strtoupper($encoding) == 'ISO-8859-1') { return utf8_decode($string); } elseif (strtoupper($encoding) == 'WINDOWS-1252') { return map_iso8859_1_w1252(utf8_decode($string)); } elseif (strtoupper($encoding) == 'UNICODE-1-1-UTF-7') { $encoding = 'utf-7'; } if (function_exists('mb_convert_encoding')) { $conv = @mb_convert_encoding($string, strtoupper($encoding), 'UTF-8'); if ($conv) return $conv; } if (function_exists('iconv')) { $conv = @iconv('UTF-8', strtoupper($encoding), $string); if ($conv) return $conv; } if (function_exists('libiconv')) { $conv = @libiconv('UTF-8', strtoupper($encoding), $string); if ($conv) return $conv; } return $safe; } /** * Special treatment for our guys in Redmond * Windows-1252 is basically ISO-8859-1 -- with some exceptions, which get accounted for here * @param string Your input in Win1252 * @param string The resulting ISO-8859-1 string * @since 3.0.8 */ function map_w1252_iso8859_1($string = '') { if ($string == '') return ''; $return = ''; for ($i = 0; $i < strlen($string); ++$i) { $c = ord($string{$i}); switch ($c) { case 129: $return .= chr(252); break; case 132: $return .= chr(228); break; case 142: $return .= chr(196); break; case 148: $return .= chr(246); break; case 153: $return .= chr(214); break; case 154: $return .= chr(220); break; case 225: $return .= chr(223); break; default: $return .= chr($c); break; } } return $return; } /** * Special treatment for our guys in Redmond * Windows-1252 is basically ISO-8859-1 -- with some exceptions, which get accounted for here * @param string Your input in ISO-8859-1 * @param string The resulting Win1252 string * @since 3.0.8 */ function map_iso8859_1_w1252($string = '') { if ($string == '') return ''; $return = ''; for ($i = 0; $i < strlen($string); ++$i) { $c = ord($string{$i}); switch ($c) { case 196: $return .= chr(142); break; case 214: $return .= chr(153); break; case 220: $return .= chr(154); break; case 223: $return .= chr(225); break; case 228: $return .= chr(132); break; case 246: $return .= chr(148); break; case 252: $return .= chr(129); break; default: $return .= chr($c); break; } } return $return; } ?>