Не определяется кодировка строки

143
26 января 2021, 12:00

Получаю строку:

$text = file_get_contents( $link );
echo mb_detect_encoding ( $text );

Знаю что файл кодировки ANSI, а выводит UTF-8. В связи с этим не могу конвертировать в UTF-8. Если просто вывести $text, выведет � вместо кириллицы. Скрипт в формате UTF-8. Что нужно почитать?

Answer 1

Кто подскажет почему так, буду благодарен.

Функция mb_detect_encoding не особо хорошо умеет определять кириллицу. Навскидку см. например тут: https://habr.com/en/post/107945/

И ещё была одна замечательная статья на хабре (к сожалению ссылку потерял и поиском не ищется, возможно уже давно удалена). В двух словах там было следущее: функции автоопределения кодировки в разных блокнотах (notepad++, sublime) достаточно простые, неумные, а главное - на небольших отрезках текста могут давать ложные срабатывания.

Автор той статьи работал в техподдержке какого-то вебхостинга и пилил свой блокнот для правки файлов прямо на хостинге, поэтому когда его замучали клиенты - разобрался в вопросе достаточно глубоко.

Поэтому, имейте ввиду:

  1. Автоопределение кодировки mb_detect_encoding не очень точное
  2. Вообще автоопределение кириллицы часто реализуется так себе
  3. Особенно плохо автоопределение работает на небольших фрагментах текста

Поэтому этих PHP-функций по автодетекту кириллицы вы встретите на просторах интернета много, разных.

И ещё. Вам в первых двух комментариях к вопросу дали совершенно правильные советы. Прежде чем гонять через iconv кодировки - лучше убедиться, что у вас всё находится в UTF8 (сами исходники, файлы, если это веб - то в хедерах прописано). Все эти костыли, когда у вас один файл на тысячу так некрасиво в коде смотрятся, что проще заранее договориться, что сервис работает строго в utf-8, чем костыли городить.

READ ALSO
Привязка соц сети к аккаунту php

Привязка соц сети к аккаунту php

Как реализовать привязку соц сети, например ютуб к аккаунту пользователя php делать отдельную таблицу, где хранить данные из соц сети и id пользователя...

113
Регулярное выполнение задачи

Регулярное выполнение задачи

У меня есть игровой бот, там есть эвенты во время которых людям нужно ждать некоторое время (от 10 секунд до нескольких минут)Чтобы в это время...

120
Вывод json из базы mysqli

Вывод json из базы mysqli

Есть ячейка в которую записываю json:

120
Как убрать пробелы в data-scroll PHP

Как убрать пробелы в data-scroll PHP

подскажите пожалуйста, как тут в первом data-scroll(где $content) удалить пробелыЯкорь не вешается когда заголовок состоит больше чем из одного слова

145