Хорошо - я думаю, что у меня есть справка об этом сейчас - я хочу подробнее остановиться на некоторых ошибках кодирования, с которыми сталкиваются люди:
Кажется, это сложный случай с Моджибаке, новот что я думаю происходит.Первоначальное подозрение MikeAinOz в том, что это данные UTF-8, вероятно, соответствует действительности.Если мы возьмем следующие данные UTF-8:
4 minutes
Теперь удалите сущность HTML и замените ее на символ, которому она фактически соответствует: U + 00A0.(Это неразрывный пробел, поэтому я не могу точно «показать» вас. Вы получаете строку: «4 минуты». Кодируйте ее как UTF-8, и вы получите следующую последовательность байтов:
characters: 4 [nbsp] m i n ...
bytes : 34 C2 A0 6D 69 6E ...
(я использую [nbsp] выше для обозначения буквального неразрывного пробела (символ, а не сущность HTML
, но символ, который представляет. Это просто пробел, и, следовательно, сложный.)Обратите внимание, что [nbsp] / U + 00A0 (неразрывный пробел) занимает 2 байта для кодирования в UTF-8.
Теперь, чтобы перейти от байтового потока к читаемому тексту, мы должны декодировать, используя UTF-8, так как это то, что мы кодировали. Давайте использовать ISO-8859-1 ("latin1") - если вы используете неправильный, это почти всегда так.
bytes : 34 C2 A0 6D 69 6E ...
characters: 4 Â [nbsp] m i n ...
И переключать необработанный-разбив пробел в его представление сущности HTML, и вы получите то, что у вас есть.
Итак, либо ваш PHP-компонент интерпретирует ваш текст в неправильном наборе символов, и вы должны сказать это иначе, либо вы выводитерезультат как-то в неправильном наборе символов. Больше кода было бы полезно, онкуда вы берете данные, передаваемые в этот loadHTML, и как вы собираетесь получать вывод, который вы видите?
Некоторые сведения: «кодировка символов» - это простосредство перехода от серии символов к серии байтов.Какие байты представляют "é"?UTF-8 говорит C3 A9
, тогда как ISO-8859-1 говорит E9
.Чтобы получить исходный текст из серии байтов, мы должны знать, с чем мы его закодировали.Если мы декодируем C3 A9
как данные UTF-8, мы получаем «é» обратно, если мы (ошибочно) декодируем его как ISO-8859-1, мы получаем «Ã ©».Junk.В псевдо-коде:
utf8-decode ( utf8-encode ( text-data ) ) // OK
iso8859_1-decode ( iso8859_1-encode ( text-data ) ) // OK
iso8859_1-decode ( utf8-encode ( text-data ) ) // Fails
utf8-decode ( iso8859_1-encode ( text-data ) ) // Fails
Это не код PHP и не ваше исправление ... это просто суть проблемы.Это происходит где-то в большом масштабе, и все в замешательстве.