[Закрыть]
 
popoff.donetsk.ua
Большинство людей в действительности не хотят свободы, потому что она предполагает ответственность, а ответственность большинство людей страшит. /Зигмунд Фрейд/
Начало | Новости | Статьи | Форум | Опросы | Карта сайта | Обо мне
popoff.donetsk.ua - Статьи - Программирование - Модули - a - charset_x_win
Я это делаю
Персональное меню
Голосование
Деньги, либо любимое занятие? Постоянный адрес этого вопроса
Деньги, но неинтересная работа и невозможность уделить время семье
Интересная работа, возможность саморазвиваться, но нищенский заработок
Ваш возраст (не обязательно)
Почему? (не обязательно)

Голосование закрыто.

Поиск по сайту
Реклама
Программное обеспечение любой сложности
koins.com.ua
Статистика

charset_x_win

Постоянный адрес статьи

charset_x_win -- Преобразовать строку на русском языке из неизвестной кодировки в кодировку windows-1251

Описание

string charset_x_win(string $s);

Требуемая библиотека: a.charset

Конвертирует строку из неизвестной кодировки в кодировку windows-1251.

$s

Строка в неизвестной кодировке. В текущей версии эта строка может быть в одной из кодировок: windows-1251, koi-8r, utf-8. Строка должна быть на русском языке.



Замечание: Поскольку вопрос корректности кодировки не касается символов с кодом меньше 128, то входная строка может быть так же и на английском, в транслите или на любом другом языке, в котором используются только символы с кодом меньше 128.

Функция правильно обрабатывает буквы Ё,ё и символы «».

Функция специальным образом оптимизирована для конвертирования коротких фраз. Суть оптимизации состоит в подсчёте недопустимых двух- и трёх-символьных последовательностей для слов русского языка. Для конвертирования больших текстов вполне подходят и более простые методы, состоящие в простом подсчёте допустимых/недопустимых символов.

Однако функция может быть использована и для конвертирования текстов значительных размеров. При конвертировании больших текстов для анализа кодировки используется начальный фрагмент текста, в котором содержится 256 символов с кодом больше 127.

Работа функции состоит в следующем. Исходная строка последовательно конвертируется из всех предусмотренных кодировок в кодировку windows-1251. Для каждого варианта конвертирования определяется некоторый числовой вес, который соответствует степени корректности фразы на русском языке. Этот вес зависит от следующих параметров входной строки:

  1. количество «хороших символов».

    Хорошими считаются символы, соответствующие буквам А-Я и а-я. Чем больше хороших символов, тем выше вероятность того, что кодировка - правильная.

  2. количество «плохих символов».

    Плохими считаются символы, с кодом больше 127, но которые не соответствуют буквам А-Я и а-я. Чем больше плохих символов, тем меньше вероятность того, что кодировка - правильная.

  3. количество недопустимых последовательностей из двух и из трёх символов в русском языке.

    Считается, что в русском языке не могут встретиться, например, последовательности из двух символов такие как «аы» или «нъ» или из трёх символов, например, такие как «юаа» или «йвб». Чем больше в строке таких последовательностей, тем меньше вероятность того, что кодировка - правильная.

Пример использования функции charset_x_win().

echo charset_x_win('ЮЕМПЧЕЛ')."<br />";
echo
charset_x_win('юемпчел')."<br />";
echo
charset_x_win('человек')."<br />";
echo
charset_x_win('ЧЕЛОВЕК')."<br />";
echo
charset_x_win("человек")."<br />";
echo
charset_x_win("ЧЕЛОВЕК")."<br />";

Результат выполнения этого примера:

человек
ЧЕЛОВЕК
человек
ЧЕЛОВЕК
человек
ЧЕЛОВЕК

Смотрите также

Скачать файл скрипта с функцией charset_x_win()
a.charset.php

Иван Рощин. Автоматическое определение кодировки текста
http://ivr.webzone.ru/articles/defcod_2/index.htm

Функция для формирования массивов внутри функции _charset_count_pairs() (можете её использовать, если захотите сформировать свои собственные массивы):
a.charset.ru.builder.php

Последняя модификация: 29.12.09 16:44

Обсуждение статьи в форуме

Не проходите мимо! Оставьте Ваш комментарий в форуме! >>>

22.06.06 01:56 Владимир

Вообще отлично, молодец!
Я б умер такой скрипт писать))

28.07.06 09:30 Алексей Крылов, Ptechka dot ru

Юрию Попову - большое спасибо. Использую в своём парсере поисковых запросов из реферрера, отлично работает.

Кстати, с Я.Маркета приходят люди с такими реферрерами: «http://market.yandex.ru/search.xml?hid=&text=рїсѓр»сњсѓрѕрјрµс‚сђ&grhow=shop&numdoc=&how=pricemin&asc=1&np=1».
И декодировать «рїсѓр»сњсѓрѕрјрµс» не получается ничем... Самое обидное, что я не могу воспроизвести условия, при которых получается такая кракозябра...

p.s. в библиотеке непрописанная функция debug_info - нужно поставить заглушку.

05.08.06 19:42 Imbolc

Респектище :)
Было бы ещё здорово утф16 поддержать...

08.01.07 15:58 гость

Здоровски, очень полезно! Вот только так и не удалось запустить, ибо не определена ф-ия debug_info() - почему так вышло - не знаю. Использую исходной код библиотеки. Попробовал убрать её вызов, но тогда ничего не преобразуется. Как обойти ?

19.01.07 00:47 popoff

Вот только так и не удалось запустить, ибо не определена ф-ия debug_info()

fixed.

08.02.07 11:35 rommul at km dot ru

Огромное спасибо за скрипт. Он меня очень выручил!

13.03.07 11:41 Alex_B

Спасибо! библиотека очень помогла!

15.04.07 14:44 Anton

Спасибо, выручил!

19.04.07 06:57 zer0ne

Гениально! Очень спасибо тебе за труд.

24.04.07 16:13 Aleksey

Очень хорошо работает скрипт. Жалко что нет поддержки UNICODE

25.04.07 21:31 Ctrange

Не вполне корректно отрабатывает спецсимволы и знаки препинания
Из KOI в Win: ... -> ЂЂЂ
 « и » -> и k?

~~~~~ 25 Апр 2007, 21:45 ~~~~~

В продолжение: Заменил функцию
function _charset_utf_win($s)
на
function _charset_utf_win($s)
{

$r = iconv(utf-8, windows-1251, $s);

 

return $r;

}

13.05.07 09:10 Igor

А скрипт суперский еще бы потдержку UTF и было бы суппер.

13.05.07 11:20 popoff

Не вполне корректно отрабатывает спецсимволы и знаки препинания
Из KOI в Win: ... -> ЂЂЂ
« и » -> и k?

Ctrangeфорумы popoff.donetsk.ua


fixed

В продолжение: Заменил функцию
function _charset_utf_win($s)
на
function _charset_utf_win($s)
{

$r = iconv(“utf-8”, “windows-1251”, $s);

return $r;

}

Ctrangeфорумы popoff.donetsk.ua

Not accepted.

Из-за возможности неправильных символов, от которых iconv может тошнить.

еще бы потдержку UTF и было бы суппер.

Igorфорумы popoff.donetsk.ua

Скрипт поддерживает UTF-8.

13.05.07 14:30 Игорь

Да iconv это что то.Кстати твой скрипт меня спас.Спасибо большое за него.Я имел ввиду хорошо бы перекодировка не в windows-1251 а еще бы в UTF-8 то есть функция типа charset_x_utf8

14.05.07 10:08 ИГОРЬ

Да iconv это что то.Кстати твой скрипт меня спас.Спасибо большое за него.Я имел ввиду хорошо бы перекодировка не в windows-1251 а еще бы в UTF-8 то есть функция типа charset_x_utf8

Игорьфорумы popoff.donetsk.ua



И еще добавлю.Ведь счас идет работа именно с UTF-8 тесть windows-1251 отходит в небытие.Имеет смысл сделать перекодировку в UTF-8 с неизвестной кодировки.эТо был бы золотой скрипт Темболее когда есть опыт написания подобного скрипта.

04.06.07 11:02 sweater

Огромное спасибо.
оставь WMZ кошель - искренне хочется сделать небольшое donate :)

04.06.07 21:23 popoff

Пожалуйста:
Z345300577580
:)

25.06.07 08:49 Khabibulin

Все конечно круто! Но как быть с Украинскими символами, такими как іІїЇєЄ?
Помогите пожалуйста, очень надо!

25.06.07 16:47 Sebekon

Отличнейший скрипт, работает очень быстро.
предлагаю добавить перекодировку из unicode
как вариант — использовать вот такую функцию в самом начале:
function unicode_escape($str)
{
$escape_table = array(
  '%20' => ' ',
  '%21' => '!',
  '%2C' => ',',
  '%3A' => ':',
  '%3B' => ';',
  '%u0410' => 'А',
  '%u0411' => 'Б',
  '%u0412' => 'В',
  '%u0413' => 'Г',
  '%u0414' => 'Д',
  '%u0415' => 'Е',
  '%u0401' => 'Ё',
  '%u0416' => 'Ж',
  '%u0417' => 'З',
  '%u0418' => 'И',
  '%u0419' => 'Й',
  '%u041A' => 'К',
  '%u041B' => 'Л',
  '%u041C' => 'М',
  '%u041D' => 'Н',
  '%u041E' => 'О',
  '%u041F' => 'П',
  '%u0420' => 'Р',
  '%u0421' => 'С',
  '%u0422' => 'Т',
  '%u0423' => 'У',
  '%u0424' => 'Ф',
  '%u0425' => 'Х',
  '%u0426' => 'Ц',
  '%u0427' => 'Ч',
  '%u0428' => 'Ш',
  '%u0429' => 'Щ',
  '%u042A' => 'Ъ',
  '%u042B' => 'Ы',
  '%u042C' => 'Ь',
  '%u042D' => 'Э',
  '%u042E' => 'Ю',
  '%u042F' => 'Я',
  '%u0430' => 'а',
  '%u0431' => 'б',
  '%u0432' => 'в',
  '%u0433' => 'г',
  '%u0434' => 'д',
  '%u0435' => 'е',
  '%u0451' => 'ё',
  '%u0436' => 'ж',
  '%u0437' => 'з',
  '%u0438' => 'и',
  '%u0439' => 'й',
  '%u043A' => 'к',
  '%u043B' => 'л',
  '%u043C' => 'м',
  '%u043D' => 'н',
  '%u043E' => 'о',
  '%u043F' => 'п',
  '%u0440' => 'р',
  '%u0441' => 'с',
  '%u0442' => 'т',
  '%u0443' => 'у',
  '%u0444' => 'ф',
  '%u0445' => 'х',
  '%u0446' => 'ц',
  '%u0447' => 'ч',
  '%u0448' => 'ш',
  '%u0449' => 'щ',
  '%u044A' => 'ъ',
  '%u044B' => 'ы',
  '%u044C' => 'ь',
  '%u044D' => 'э',
  '%u044E' => 'ю',
  '%u044F' => 'я',
);   
return strtr($str, $escape_table);
}

тогда функция будет ещё универсальнее.

26.06.07 16:50 noindex

popoff - Вы гений.
Немеренный респект за charset_x_win()...
День убил на борьбу с разными кодировками, Ваш способ единственный дающий 100% результат!

Просмотреть все комментарии в режиме форума. Всего комментариев: 80
Не проходите мимо! Оставьте Ваш комментарий в форуме! >>>