Zend_Dom_Query и проблемы с кодировками

Появилась недавно задача распарсить несколько html страничек, раньше, для этого я использовал Perl, и смело извлекал нужные мне данные с помощью регулярный выражений, но так как времени на решение задачи было предостаточно, и проект работает на Zend Framework, то решил использовать такой класс, как Zend_Dom_Query. О его преимуществах написано на страничке http://framework.zend.com/manual/en/zend.dom.query.html#zend.dom.query.operation. А для тех, кто работал с javascript’овым фреймворком prototype, так вообще, данный класс просто подарок, так как используются до боли родные селекторы.

Итак, все вроде бы было хорошо, по началу. Но, как оказалось, и это написано на самом сайте php, что такой класс как DomDocument работает только с кодировкой utf-8. Казалось, что бы тут сложного, тем более что сайты были в той самой кодировке, но не тут-то было. Когда попадались umlaut-символы, они превращались в кракозяблы. Проверил, ради эксперимента с русскими сайтами, та же беда. На сайте php написаны следующие выводы, это указать кодировку явно, например, вставить после <head> следующую запись:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

В принципе это несложно, но проблема в том, что не помогло. Погуглив и, поэкспериментировав, решение все-таки было найдено.
Даже если сайт в кодировке utf-8, то следует выполнить такой вот нехитрый код с вашим html:

$html = mb_convert_encoding( $html, 'HTML-ENTITIES', 'utf-8');

Где, $html — текст, разбираемой странички.
Если сайт в кодировке, например, windows-1251, то перед данной строкой стоит сделать следующее:

$html = mb_convert_encoding( $html, 'utf-8', 'windows-1251');

И только после этого вызывать:

$dom = new Zend_Dom_Query($html);

После таких вот манипуляций можете смело извлекать данные, не забывая о том, что они теперь в utf-8. На это стоит обратить внимание, если при выводе вы используете другую кодировку.

Кстати, если Вам понадобится купить дешевый домен для сайта, то делайте это на ChiliDomain — 6$ за зоны .com, .org, .net, .biz. Очень жгучие цены, просто фантастическая поддержка (проверено лично) и удобный интерфейс сделают покупку домена не только выгодной, но и приятной.
[ad name=»Adsense»]