как определить входящую кодировку

12
kav
На сайте с 21.02.2006
Offline
107
kav
7595

по сабжу : есть контент в неизвестной кодировке ... в рнр есть функция, перекодирующая из одной в другую, но если входящая кодировка не известна получается полная лажа...

требуется примерно следующее:



$INPUT_CHARSET = неизвестная_фукция_определения_кодировки($TEXT);

$TEXT = iconv("$INPUT_CHARSET//IGNORE", "WINDOWS-1251//IGNORE", "$TEXT");

Я знаю только то, что ничего не знаю © Сократ а когда я забываю даже это, вспоминаю про..... Форум - это такое место, где 2-е людей могут убедить в своих заблуждениях тысячи
A
На сайте с 12.04.2007
Offline
9
#1
kav:
по сабжу : есть контент в неизвестной кодировке ... в рнр есть функция, перекодирующая из одной в другую, но если входящая кодировка не известна получается полная лажа...

требуется примерно следующее:


$INPUT_CHARSET = неизвестная_фукция_определения_кодировки($TEXT);

$TEXT = iconv("$INPUT_CHARSET//IGNORE", "WINDOWS-1251//IGNORE", "$TEXT");

Поищите таблицы частот в гугле. Все алгоритмы определения кодировок работают по ним. Суть алгоритма в том, что в каждом языке частотность символов разная, соответственно по ней и можно определить на каком языке текст и в какой он кодировке, особенно если язык известен заранее. Алгоритм не дает 100% результата и плохо работает на маленьком наборе данных. Но ИМХО иначе никак нельзя.

seo.adman.com: покупка/продажа ссылок, рекламный брокер (http://seo.adman.com) vads.adman.com: свой рекламный брокер за 5 минут (http://vads.adman.com)
J
На сайте с 03.07.2006
Offline
122
#2

раньше тоже пытался найти таковую..

но такой нет.

только если самому создать эту ф-цию и по какимто, свойственным определенной кодировке символам, определять

иначе никак

либо если контент берется с сайта по мета-тегу

но там указывается не всегда та кодировка..

Тимонин Александр, Тольятти. Вконтакте https://vk.com/my.face (https://vk.com/my.face) Управление ссылками на своих сайтах + Контекстные ссылки (/ru/forum/489616) Скрипты, недорого отзывы от форумчан (/ru/forum/268922)
kav
На сайте с 21.02.2006
Offline
107
kav
#3

у меня 2 входные кодировки - UTF-8 и cp1251 ... берутся из RSS каналов, но и там не всегда она определена... 🙅

Shtogrin
На сайте с 02.11.2006
Offline
95
#4
www.shtogrin.com (http://www.shtogrin.com/). Канцтовары (http://www.invit.com.ua/). 1С Бухгалтерия (http://account.kiev.ua/).
NB
На сайте с 14.09.2004
Offline
95
#5

Вот здесь: http://xpoint.ru/forums/programming/PHP/thread/39758.xhtml было интересное обсуждение аналогичного вопроса.

UA
На сайте с 19.06.2006
Offline
100
#6
kav:
у меня 2 входные кодировки - UTF-8 и cp1251

Тогда очень просто: в UTF-8 для русских букв очень часто повторяется байт 0xD0 или 0xD1.

Например, слово "привет": D0 BF D1 80 D0 B8 D0 BC D0 B5 D1 80.

NB
На сайте с 14.09.2004
Offline
95
#7

Ugnich Anton, это если русский текст. В вопросе топикстартера об этом, вообще говоря, явно сказано не было. Так что в общем случае задача несколько сложнее. А в частном -- русский текст в UTF-8 можно детектировать с помощью достаточно простой регулярки типа

ereg("([\xD0-\xD1].){3,}",$text)
B
На сайте с 26.12.2006
Offline
51
#8

ТС, нужна еденичная обработка этого контента или же будет постоянно появляться все новый и свежий контент в непонятной кодировке?

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

PHP,MySQL,JavaScript,AJAX
UA
На сайте с 19.06.2006
Offline
100
#9
Nick Bubelo:
Ugnich Anton, это если русский текст. В вопросе топикстартера об этом, вообще говоря, явно сказано не было. Так что в общем случае задача несколько сложнее.

Не придумывайте себе трудности. Для каких языков применяется кодировка cp1251?

Николай В.
На сайте с 07.09.2006
Offline
62
#10
kav:
у меня 2 входные кодировки - UTF-8 и cp1251 ... берутся из RSS каналов, но и там не всегда она определена...

Чует мое сердце, что если передать в iconv('UTF-8', 'CP1251', $text); параметр в cp1251, то она гавкнет нотисом и возвратит null. Поэтому предлагаю такую функцию:


function UTF($text)
{
$utf = iconv('CP1251', 'UTF-8', $text);
$cp1251 = @iconv('UTF-8', 'CP1251', $text);
if (!$cp1251)
return $utf;
else
return $text;
}

т.е. на вход передается текст в непонятной кодировке, а возвращается в utf-8

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий