На днях необходимо было распарсить ресурс в рамках проекта на Symfony 2. Для этого я решил воспользоваться Сrawler’ом — компонентом Symfony, который позволяет работать с DOM элементами, используя при этом XPath и CSS фильтры. Но возникла проблема с кодировкой.
Некоторые символы выглядели явно не так, как должны были, несмотря на то, что везде где можно использовалась кодировка UTF-8. Дело в том, что Crawler использует кодировку ISO-8859-1 в том случае, если он не смог ее определить по мета-тегу
<meta charset="utf-8">
Исправить проблему можно воспользовавшись методом addHtmlContent()
, который вторым параметром принимает кодировку (по умолчанию — UTF-8).
Поэтому вместо
use Symfony\Component\DomCrawler\Crawler;
...
$crawler = new Crawler($html);
нужно использовать
use Symfony\Component\DomCrawler\Crawler;
...
$crawler = new Crawler();
$crawler->addHtmlContent($html);