Черные алмазные вопросительные знаки против потери некоторых персонажей - PullRequest
4 голосов
/ 16 февраля 2012

Я уже читал об этой проблеме и сталкивался с ней раньше, но мне еще предстоит найти решение обеих сторон. У меня есть агрегатор новостей, который извлекает новости из RSS-каналов. После отображения содержимого я получал знаки вопроса с черным бриллиантом, поэтому после некоторых исследований я добавил следующую строку кода (PHP):

$content = mb_convert_encoding($content, 'UTF-8', 'HTML-ENTITIES');

Это удалось исправить эту проблему, но, глядя на другую статью, в которой были некоторые испанские слова с акцентами, я заметил, что акценты были преобразованы в прикольные символы. Они выглядели хорошо раньше. Например, теперь я вижу такие вещи, как:

Гена © ticas

Теперь я предпочел бы иметь 2-ую проблему, поскольку она не так сильно выпирает, но в идеале я хочу исправить обе. Мои таблицы MySQL - это UTF-8, а также тип страницы. Есть идеи ??

1 Ответ

3 голосов
/ 16 февраля 2012

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

Фиды XML должны сообщать, какой кодировкой они являются в преамбуле XML, и сервер должен посылать заголовки, указывающие кодировку символов, которую использует файл, но они не обязательно присутствуют, и если они есть, они не уверены быть точным

Вы можете использовать mb_detect_encoding , чтобы попытаться выяснить, какую кодировку использует файл, который вы анализируете, но, опять же, это не на 100% точно.

Так что, если ваша цель - нормализовать все каналы, которые вы обрабатываете, в один и тот же набор символов (я полагаю, UTF 8), вы можете посмотреть на преамбулу XML, заголовки (если был отправлен соответствующий) и результат mb_detect_encoding для определения кодировки. Если все вышесказанное согласится, вы, вероятно, (но не обязательно) хорошо знаете, в какой кодировке находится файл и что вам нужно сделать для его преобразования. Если между этими методами есть разногласие, вам придется решить для себя, какое действие предпринять.

Короче, добро пожаловать в charset hell. Как вам это нравится?

...