AlexanderTsymbal
@AlexanderTsymbal
tsymbal.su

PHP Simple HTML DOM и кириллица несовместимы?

Добрый вечер, коллеги. Помогите!

С недавних пор на одном из сайтов (на злосчастном nic.ru), где используется класс Simple HTML DOM перестала парситься кириллица. Хотя раньше всё было ок. Я понимаю, что что-то могло поменяться в настройках сервера, но сейчас речь не об этом.

Есть кусок html-кода, который "кушает" Simple HTML DOM, и если в нём присутствует кириллица, то парсинг обрывается на первом же теге, в котором она найдена.

Пример банальный:
$gt_text_volume = "<p>latin</p><p>кириллица</p><h3>latin 3</h3>";//собственно, кусок кода
//...(подключили Simple HTML DOM)
$html = str_get_html($gt_text_volume);//загоняем его в парсер
$tags = $html->find('*');//ищем все теги
foreach ($tags as $key => $tag) {//перебираем их
  echo "\r\n".$tag->innertext;//пытаемся вывести содержимое
}
Результат получаем следующий:
latin
кириллица
Т.е., парсер дошёл до второго тега с кириллицей, и на нём оборвался перебор.

Если я заменю исходный кусок кода на нижеследующий (т.е. удалю из него всю кириллицу)
$gt_text_volume = "<p>latin</p><p>latin 2</p><h3>latin 3</h3>";
То результат корректный. Выводится следующее:
latin 
latin 2 
latin 3


Файл в UTF-8, сайт работает в UTF-8.

Может, кто сталкивался? Я обгуглил весь интернет (так мне кажется), нашёл вопросы с такой же проблемой. Но ответов нет. ПОМОГИТЕ! Слёзно прошу!

UPD: Решение найдено. Для корректной работы нужно убедиться что mbstring.func_overload = 0.
  • Вопрос задан
  • 250 просмотров
Пригласить эксперта
Ответы на вопрос 1
zkrvndm
@zkrvndm
Архитектор решений
В начале вашего PHP файла разместите:
<?php

// Устанавливаем тип документа и его кодировку:
header('Content-Type: text/html; charset=utf-8');

// Включаем показ ошибок:

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);

// Далее ваш код

И повторите попытку. Если будут ошибки, текст ошибок сюда.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы