PHP: как мне преобразовать иностранные символы из simple_html_dom в UTF8? - PullRequest
1 голос
/ 31 июля 2011

У меня возникли проблемы со строкой, которая приходит с веб-страницы, содержащей иностранные символы.

Строка генерируется путем анализа веб-страницы с использованием str_get_html(), за которым следует $htmldom->innertext; (библиотека классов simple_html_dom).

Когда я вывожу строку, используя htmlentities(), она отображается нормально; но, используя explode() на строке и печатая части, я получаю наклонный блок с вопросительным знаком для каждого иностранного символа.

Мне нужно сохранить строку в utf8 базе данных MySQL, поэтому мне нужны правильные иностранные символы.

Моя страница имеет заголовок с набором символов utf8.

Я уже пробовал mb_split() и preg_split(), но у них та же проблема.

Ответы [ 2 ]

2 голосов
/ 31 июля 2011

Я решил проблему с помощью: https://github.com/neitanod/forceutf8

У него есть замечательная функция, которая просто конвертирует все в utf-8, независимо от того, из какого источника это происходит (до тех пор, пока это происходит на Latin1 (iso 8859-1), уже Windows-1252 или UTF8 или их смесь).

Большое спасибо Себастьяну Гриньоли.

1 голос
/ 31 июля 2011

PHP и UTF-8 не очень хорошая комбинация. Некоторые функции работают нормально с UTF-8, другие - нет, и худшими являются те, которые задокументированы для работы, но на самом деле не работают (например, DOMDocument).

Вы можете использовать mb_convert_encoding() для преобразования многобайтовых символов в объекты HTML, что обычно обеспечивает приемлемый обходной путь:

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