Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> UTF-8 -> др. кириллические кодировки 
:(
    Опции темы
Mal Hack
Дата 20.5.2006, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



мда, все мы учились по-немногу, чему-нибудь и как-нибудь 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;
}
 


PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0703 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.