Определить кодировку на PHP

12
lutskboy
На сайте с 22.11.2013
Offline
173
333

Христос Воскресе!

У меня есть читалка fb2 книг на PHP. И вроде все хорошо работает

но есть нестандартные книги у которых нет сверху строки. 

<?xml version="1.0" encoding="тут кодировка"?>

имеем не валидный xml

И можно ету строчку добавить. Но проблема в том что нужно знать в какой кодировке файл

mb_check_encoding и mb_detect_encoding результата не дают

разные подходы типа 

 $encodings = array('UTF-8', 'ISO-8859-1', 'Windows-1251', 'KOI8-R', 'KOI8-U');
            
            foreach ($encodings as $encoding) {
                $converted = iconv($encoding, $encoding . '//IGNORE', $string);
                if (md5($string) == md5($converted)) {
                    return $encoding;
                }
            }
            
            return false;

 тоже все плохо. как можно Определить кодировку на PHP..?

желательно без километровых библиотек с гитхаба

D.iK.iJ
На сайте с 26.05.2013
Offline
225
#1

Ну как бы... обычно делаю так. Но хорошо бы хоть знать что  mb_detect_encoding у вас выдает вообще для таких книг.

$content = mb_convert_encoding($content, 'utf-8', mb_detect_encoding($content));
Адаптивный дизайн в 2 строчки ( https://dikij.com/wm/adaptaciya-saytov.php ). + Принимаю заказы любой сложности ( https://searchengines.guru/ru/forum/926323 ). 💎 Еще я делаю классные кулоны с опалами ( https://mosaicopal.ru/ ).
lutskboy
На сайте с 22.11.2013
Offline
173
#2
D.iK.iJ #:
mb_detect_encoding

тоже раньше так делал. оказалось на php определить кодировку файла нереально

E
На сайте с 10.02.2024
Offline
3
#3

Попробуйте определить кодировку консольной тулзой.

Например:

$encoding = shell_exec('file -bi /path/to/file');

Это для Linux. Для Win / Mac не подскажу.

shell_exec конечно должен быть разрешен в настройках php.

W1
На сайте с 22.01.2021
Offline
289
#4
lutskboy #:
кодировку файла

Функция mb_detect_encoding  определяет кодировку строки, всё-таки. Это на всякий случай.

Мой форум - https://webinfo.guru –Там я всегда на связи
L
На сайте с 14.12.2008
Offline
121
#5
lutskboy :
mb_check_encoding и mb_detect_encoding результата не дают

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

в php нет нужной тебе функции, только через консоль увидишь

Д
На сайте с 01.04.2012
Offline
134
#6
VPN/SSD VPS в любой локации на выбор ( https://cp.inferno.name/cart.php ). Скидка 25% для новых заказов по промо-коду VESNA2024
lutskboy
На сайте с 22.11.2013
Offline
173
#7
Дадуда #:
не то?

не то

Eddgar #:
$encoding = shell_exec('file -bi /path/to/file');

ето пробовал. просто в начале темы не написал. выдает text/html; charset=unknown-8bit

webinfo #:
Функция mb_detect_encoding  определяет кодировку строки, всё-таки

знаем. и так пробовал. регуляркой строку доставал. и ее кодировку проверил. не идет оно и все

E
На сайте с 10.02.2024
Offline
3
#8
lutskboy #:

не то

ето пробовал. просто в начале темы не написал. выдает text/html; charset=unknown-8bit

знаем. и так пробовал. регуляркой строку доставал. и ее кодировку проверил. не идет оно и все

Еще вариант  без исходной кодировки через консоль в VIM:

vim +"set nobomb | set fenc=utf8 | x" /path/to/file
lutskboy
На сайте с 22.11.2013
Offline
173
#9
Eddgar #:
vim +"set nobomb | set fenc=utf8 | x" /path/to/file

испортило файл <book-title>ðÏÚÄÎÅÅ ÒÁÓËÁÑÎÉÅ</book-title>

E
На сайте с 10.02.2024
Offline
3
#10

Бэкап надеюсь делали)

То, что получилось похоже на win1251.

Киньте файл, просто интересно, что за хрень.

12

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