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. Для каждого варианта конвертирования определяется некоторый числовой вес, который соответствует степени корректности фразы на русском языке. Этот вес зависит от следующих параметров входной строки: количество «хороших символов». Хорошими считаются символы, соответствующие буквам А-Я и а-я. Чем больше хороших символов, тем выше вероятность того, что кодировка - правильная. количество «плохих символов». Плохими считаются символы, с кодом больше 127, но которые не соответствуют буквам А-Я и а-я. Чем больше плохих символов, тем меньше вероятность того, что кодировка - правильная. количество недопустимых последовательностей из двух и из трёх символов в русском языке. Считается, что в русском языке не могут встретиться, например, последовательности из двух символов такие как «аы» или «нъ» или из трёх символов, например, такие как «юаа» или «йвб». Чем больше в строке таких последовательностей, тем меньше вероятность того, что кодировка - правильная.
Пример использования функции 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 q Обсуждение статьи в форуме Не проходите мимо! Оставьте Ваш комментарий в форуме! >>> 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() - почему так вышло - не знаю. Использую исходной код библиотеки. Попробовал убрать её вызов, но тогда ничего не преобразуется. Как обойти ? Вот только так и не удалось запустить, ибо не определена ф-ия debug_info() | fixed. 08.02.07 11:35 rommul at km dot ru Огромное спасибо за скрипт. Он меня очень выручил!  13.03.07 11:41 Alex_B Спасибо! библиотека очень помогла! 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 и было бы суппер. Не вполне корректно отрабатывает спецсимволы и знаки препинания Из 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-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 :) Пожалуйста: Z345300577580 :) Все конечно круто! Но как быть с Украинскими символами, такими как “іІїЇєЄ”? Помогите пожалуйста, очень надо! 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% результат! Просмотреть все комментарии в режиме форума. Всего комментариев: 65 Не проходите мимо! Оставьте Ваш комментарий в форуме! >>> Цитирование материалов моего сайта приветствуется! при условии видимой действующей! гиперссылки на мой сайт. [Ссылки] Если Вы нашли опечатку на этой странице, пожалуйста, выделите ее мышью и нажмите Ctrl+Enter. Сделаем язык чище! (c) Yuri Popoff, 2004 - 2008, popoff.donetsk.ua, style.donetsk.ua |
|