Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > UTF-8 -> др. кириллические кодировки


Автор: Mal Hack 20.5.2006, 23:34
мда, все мы учились по-немногу, чему-нибудь и как-нибудь smile (с)
Код

function utf8_to_win($string) {
 return str_replace(
  array('\xD0\xB0', '\xD0\xB1', '\xD0\xB2', '\xD0\xB3', '\xD0\xB4', '\xD0\xB5', '\xD1\x91', '\xD0\xB6', '\xD0\xB7', '\xD0\xB8', '\xD0\xB9', '\xD0\xBA', '\xD0\xBB', '\xD0\xBC', '\xD0\xBD', '\xD0\xBE', '\xD0\xBF', '\xD1\x80', '\xD1\x81', '\xD1\x82', '\xD1\x83', '\xD1\x84', '\xD1\x85', '\xD1\x86', '\xD1\x87', '\xD1\x88', '\xD1\x89', '\xD1\x8A', '\xD1\x8B', '\xD1\x8C', '\xD1\x8D', '\xD1\x8E', '\xD1\x8F'),
  array('а',        'б',        'в',        'г',        'д',        'е',        'ё',        'ж',        'з',        'и',        'й',        'к',        'л',        'м',        'н',        'о',        'п',        'р',        'с',        'т',        'у',        'ф',        'х',        'ц',        'ч',        'ш',        'щ',        'ъ',        'ы',        'ь',        'э',        'ю',        'я'),
  $string
 );
}
 
 аналогично делаем для больших букв
Код

function upper_utf8_to_win($string) {
 return str_replace(
  array('\xD0\x90', '\xD0\x91', '\xD0\x92', '\xD0\x93', '\xD0\x94', '\xD0\x95', '\xD0\x81', '\xD0\x96', '\xD0\x97', '\xD0\x98', '\xD0\x99', '\xD0\x9A', '\xD0\x9B', '\xD0\x9C', '\xD0\x9D', '\xD0\x9E', '\xD0\x9F', '\xD1\xA0', '\xD1\xA1', '\xD1\xA2', '\xD1\xA3', '\xD1\xA4', '\xD1\xA5', '\xD1\xA6', '\xD1\xA7', '\xD1\xA8', '\xD1\xA9', '\xD1\xAA', '\xD1\xAB', '\xD1\xAC', '\xD1\xAD', '\xD1\xAE', '\xD1\xAF'),
  array('А',        'Б',        'В',        'Г',        'Д',        'Е',        'Ё',        'Ж',        'З',        'И',        'Й',        'К',        'Л',        'М',        'Н',        'О',        'П',        'Р',        'С',        'Т',        'У',        'Ф',        'Х',        'Ц',        'Ч',        'Ш',        'Щ',        'Ъ',        'Ы',        'Ь',        'Э',        'Ю',        'Я'),
  $string
 );
}
 
 теперь вспоминаем, что вызов двух str_replace занимает много больше времени, чем вызов одного, но с массивом...
посему решаем, что конструкция :

Код

function upper_utf8_to_win($string) {
 return str_replace(
  array('\xD0\x90', '\xD0\x91', '\xD0\x92', '\xD0\x93', '\xD0\x94', '\xD0\x95', '\xD0\x81', '\xD0\x96', '\xD0\x97', '\xD0\x98', '\xD0\x99', '\xD0\x9A', '\xD0\x9B', '\xD0\x9C', '\xD0\x9D', '\xD0\x9E', '\xD0\x9F', '\xD1\xA0', '\xD1\xA1', '\xD1\xA2', '\xD1\xA3', '\xD1\xA4', '\xD1\xA5', '\xD1\xA6', '\xD1\xA7', '\xD1\xA8', '\xD1\xA9', '\xD1\xAA', '\xD1\xAB', '\xD1\xAC', '\xD1\xAD', '\xD1\xAE', '\xD1\xAF'),
  array('А',        'Б',        'В',        'Г',        'Д',        'Е',        'Ё',        'Ж',        'З',        'И',        'Й',        'К',        'Л',        'М',        'Н',        'О',        'П',        'Р',        'С',        'Т',        'У',        'Ф',        'Х',        'Ц',        'Ч',        'Ш',        'Щ',        'Ъ',        'Ы',        'Ь',        'Э',        'Ю',        'Я'),
  $string
 );
}

function utf8_to_win($string) {
 $string = upper_utf8_to_win($string);
 return str_replace(
  array('\xD0\xB0', '\xD0\xB1', '\xD0\xB2', '\xD0\xB3', '\xD0\xB4', '\xD0\xB5', '\xD1\x91', '\xD0\xB6', '\xD0\xB7', '\xD0\xB8', '\xD0\xB9', '\xD0\xBA', '\xD0\xBB', '\xD0\xBC', '\xD0\xBD', '\xD0\xBE', '\xD0\xBF', '\xD1\x80', '\xD1\x81', '\xD1\x82', '\xD1\x83', '\xD1\x84', '\xD1\x85', '\xD1\x86', '\xD1\x87', '\xD1\x88', '\xD1\x89', '\xD1\x8A', '\xD1\x8B', '\xD1\x8C', '\xD1\x8D', '\xD1\x8E', '\xD1\x8F'),
  array('а',        'б',        'в',        'г',        'д',        'е',        'ё',        'ж',        'з',        'и',        'й',        'к',        'л',        'м',        'н',        'о',        'п',        'р',        'с',        'т',        'у',        'ф',        'х',        'ц',        'ч',        'ш',        'щ',        'ъ',        'ы',        'ь',        'э',        'ю',        'я'),
  $string
 );
}


нам не по карману, начинаем объединять...

Код

function utf8_to_win($string) {
 return str_replace(
  array('\xD0\xB0', '\xD0\xB1', '\xD0\xB2', '\xD0\xB3', '\xD0\xB4', '\xD0\xB5', '\xD1\x91', '\xD0\xB6', '\xD0\xB7', '\xD0\xB8', '\xD0\xB9', '\xD0\xBA', '\xD0\xBB', '\xD0\xBC', '\xD0\xBD', '\xD0\xBE', '\xD0\xBF', '\xD1\x80', '\xD1\x81', '\xD1\x82', '\xD1\x83', '\xD1\x84', '\xD1\x85', '\xD1\x86', '\xD1\x87', '\xD1\x88', '\xD1\x89', '\xD1\x8A', '\xD1\x8B', '\xD1\x8C', '\xD1\x8D', '\xD1\x8E', '\xD1\x8F', '\xD0\x90', '\xD0\x91', '\xD0\x92', '\xD0\x93', '\xD0\x94', '\xD0\x95', '\xD0\x81', '\xD0\x96', '\xD0\x97', '\xD0\x98', '\xD0\x99', '\xD0\x9A', '\xD0\x9B', '\xD0\x9C', '\xD0\x9D', '\xD0\x9E', '\xD0\x9F', '\xD1\xA0', '\xD1\xA1', '\xD1\xA2', '\xD1\xA3', '\xD1\xA4', '\xD1\xA5', '\xD1\xA6', '\xD1\xA7', '\xD1\xA8', '\xD1\xA9', '\xD1\xAA', '\xD1\xAB', '\xD1\xAC', '\xD1\xAD', '\xD1\xAE', '\xD1\xAF'),
  array('а',        'б',        'в',        'г',        'д',        'е',        'ё',        'ж',        'з',        'и',        'й',        'к',        'л',        'м',        'н',        'о',        'п',        'р',        'с',        'т',        'у',        'ф',        'х',        'ц',        'ч',        'ш',        'щ',        'ъ',        'ы',        'ь',        'э',        'ю',        'я',        'А',        'Б',        'В',        'Г',        'Д',        'Е',        'Ё',        'Ж',        'З',        'И',        'Й',        'К',        'Л',        'М',        'Н',        'О',        'П',        'Р',        'С',        'Т',        'У',        'Ф',        'Х',        'Ц',        'Ч',        'Ш',        'Щ',        'Ъ',        'Ы',        'Ь',        'Э',        'Ю',        'Я'),
  $string
 );
}


получилась немного громоздкая на первый взгляд функция, но ее работоспособность в десятки раз выше, нежели чем у варианта предложенного уважаемым MuToGeN 
 А теперь обратно:
Код
function win_utf8 ($string) {
 $string = convert_cyr_string($string, "w", "i");
 $stringout = "";
 for ($i=0; $i<strlen($string); $i++) {
  $char = ord($string[$i]);
  $stringout .= ($char>175)?"&#".(1040+($char-176)).";":$string[$i];
 }
 return $stringout;
}
 


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)