Можно ли текстовый файл с неизвестной кодировкой преобразовать в UTF-8 на PHP

Статус
В этой теме нельзя размещать новые ответы.

jabbaxatt

Добрый модератор
Регистрация
21 Янв 2009
Сообщения
902
Реакции
432
Есть текстовый файл (или текст в переменной, без разницы) с неизвестной нам кодировкой (windows 1251, ANSI, UTF-8, UCS-2 ещё какая дрянь) Нужно этот текст преобразовать в UTF-8. Т.е. как в Notepad++ есть команда "преобразовать в UTF-8 без бом".

Можно ли написать такую функцию на PHP?

Судя по мануалам мы даже имеющуюся кодировку точно определить не можем, но проблема наверняка встречалась многим, должны были уже чего-нить придумать.
 
нихрена так и не придумали толкового...
тоже был подобный вопрос но мне было проще я с http работал... Были 90 мы тянули кодировку от куда могли :D

точно определить ни как.
1) http header (Content-Type: text/html; charset=utf-8)
2) meta in html ...

И то там могут врать че хотят...
 
нихрена так и не придумали толкового...
тоже был подобный вопрос но мне было проще я с http работал... Были 90 мы тянули кодировку от куда могли :D
Подскажите тогда, пожалуйста, как точно определить кодировку при загрузки страницы по Http? Может тоже пригодится.

Дас. Жопа получается с этим в PHP.

Учитывая что решения нет - в голову приходить только подбор по словарю (берём длинные но часто встречающиеся слова в кодировке х, ищем их в тексте, повторяем для аналогичного словаря в кодировках Y-Z-M-N...., считаем количество совпадений в тексте, выбираем ту кодировку где совпадений намного больше ).

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

В моём конкретном случае видимо придётся в ручную писать признаки для случаев отличных от UTF-8, благо ПОКА это возможно.
 
Вот хорошая тема с замечательным решением http://nulled.cc/threads/198585/ - Определение кодировки при загрузке по http
 
Есть такая штука - Для просмотра ссылки Войди или Зарегистрируйся, которая умеет определять три типа - koi8, win1251 и utf8. По умолчанию перегоняет текст в win1251, но не составит труда переделать выход под utf8. Не совсем универсальное решение, но его тут быть и не может, хоть что-то.
 
Имеется функция iconv

Ее синтаксис следующий:
string iconv ( string in_charset, string out_charset, string str ), где
string in_charset – это изначальная кодировка,
string out_charset – кодировка, в которую необходимо преобразовать данные,
string str – собственно та строка, которую нужно перекодировать.

Например:
$message=iconv("cp1251", "utf-8", $_POST['message'])

Здесь кодировку переменной $message, которая была передана из формы, мы меняем с windows-1251 на utf-8.
 
d1mmas, прикол-то в том, что исходная кодировка неизвестна, к тому же от файла к файлу она может меняться ;)

В С++ для этого есть MultiByteToWideChar
В PHP есть функция "mb_detect_encoding" для определения кодировки. Правда она не всегда работает корректно
А вот тут: Для просмотра ссылки Войди или Зарегистрируйся есть решение с классом Encoding и методом fixUTF8 Encoding::fixUTF8. Я его не юзал, но народ плюсует этот метод, а значит он рабочий...
 
...В PHP есть функция "mb_detect_encoding" для определения кодировки. Правда она не всегда работает корректно...
Я даже больше скажу, она вообще никогда коректно не работает, кроме как определять utf8 толком не чего не может.
 
Не знаю почему - но обычно работает:
Скрытое содержимое доступно для зарегистрированных пользователей!
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху