Проблема преобразования ISO8859-1 в UTF-8 в PHP - PullRequest
2 голосов
/ 12 сентября 2010

Я пытаюсь преобразовать строку ISO8859-1, взятую из базы данных MySQL, и преобразовать ее в UTF-8, используя php. Однако, когда я использую функцию utf8_encode, она удаляет почти все апострофы из строки (исключения, похоже, находятся в полях HTML).

Спасибо

Ответы [ 2 ]

9 голосов
/ 12 сентября 2010

Ваш контент ‘ISO-8859-1’, вероятно, на самом деле не соответствует ISO-8859-1.

Когда вы говорите Content-Type: text/html; charset=iso-8859-1, браузеры фактически не используют ISO-8859-1, из-за досадных исторических причин. Они действительно используют кодовую страницу Windows 1252 (западноевропейская), которая очень похожа на ISO-8859-1, но не идентична.

В частности, байты в диапазоне 0x80-0x9F представляют невидимые и редко используемые управляющие коды в ISO-8859-1. Но cp1252 добавляет некоторые типографские тонкости и другие расширения в этот диапазон, включая «умные цитаты». Когда вы пишете апостроф в MS Word, он заменяет его на одну левую умную кавычку , поэтому часто возникают проблемы с кодированием текста, который был первоначально напечатан в Word и других приложениях Office.

Для преобразования cp1252 в UTF-8 вам придется использовать iconv('cp1252', 'utf-8', $somestring) вместо utf8_encode, который привязан к «реальному» ISO-8859-1.

0 голосов
/ 12 сентября 2010

Одна из возможностей - использовать Iconv. Я использовал это раньше, и это довольно хорошо.

http://php.net/manual/en/function.iconv.php

Имеется опция ПЕРЕВОДА, которая может приблизительно соответствовать символу.

...