Перевод ISO-8859-1 на проблему UTF-8 - PullRequest
2 голосов
/ 02 марта 2011

Один из моих проектов извлекает документ из Интернета и читает его.Этот документ предоставлен третьей стороной и не изменится (содержимое будет изменено, но форматирование и другие материалы не изменятся).Проблема состоит в том, что этот документ включает в себя содержимое, скопированное и вставленное из Word, который является UTF-8, однако документ закодирован в ISO-8858-1, поэтому эти символы сохраняются в базе данных как «?».

Если я пропущу текст и перекодирую его в UTF-8, вместо умных кавычек и тире, я просто получу два мусорных символа.

Как я могу преобразовать этот ISO-8859-1документ с символом UTF-8 возвращается в UTF-8, чтобы его можно было отобразить так, как он был изначально создан?

Ответы [ 3 ]

3 голосов
/ 02 марта 2011

Я нашел решение здесь: PHP: Проблемы с преобразованием символа "’ "из ISO-8859-1 в UTF-8

Сервер утверждает, что обслуживает ISO-8859-1, но на самом деле это Windows-1252, которая без проблем конвертирует в UTF-8.

2 голосов
/ 02 марта 2011
$fixed = mb_convert_encoding($broken, "UTF-8", "ISO-8859-1");

не знаю, правильно ли он будет обрабатывать UTF-8, встроенный в 8859, но это "нормальный" способ сделать это. Справочная страница здесь . Повернись и посмотри, не станет ли что-то чище или искажено.

0 голосов
/ 02 марта 2011

К счастью, ISO 8859-1 является 8-битным прозрачным.Таким образом, вы можете просто декодировать содержимое с помощью iconv , mb_convert_encoding или utf8_encode .

Я не уверен, что "я прошел через«текст» означает, но если это действительно UTF-8, обозначенный как ISO 8859-1, попробуйте исключить все промежуточные манипуляции с текстом.Если это не помогло, приведите пример (короткого) входного документа.Скорее всего, это не UTF-8, обозначенный как ISO 8859-1.

...