Я написал парсер сайта planetestate. При вытаскивании данных из "некоторых тегов", на "некоторых страницах", вместо нужного текста отображаются знаки вопросов. ВОТ одна из таких страниц. На ней, после парсинга, вместо "грн" отображается "???", также на этой странице вместо заголовка "Продається Житловий будинок" выводится "?????????? ???????? ???????" и почему-то не вытаскиваются данные из таблиц с детальной информацией, такой как "КІМНАТ 3 | ЗАГАЛЬНА 87.4 м2 | ЖИТЛОВА 51.4 м2". Кодировка сбита не только на символах кириллицы, но и на цифрах(например на цене и кредите). Таких объявлений (с плохой кодировкой) 221, всего спарсено 8873 объявления. Пример парсинга цены объекта и валюты в которой указана цена.
function parseAd($html) {
$dom = new DOMDocument();
$dom->encoding = "UTF-8";
@$dom->loadHTML($html);
$objInfo = $dom->getElementById("objInfo");
...
$strongObjs = $objBuy->getElementsByTagName("strong");
$em = $strongObjs->item(0)->getElementsByTagName("em");
if ($em->length > 0) { // currency
$currency = str_replace(chr(0xC2).chr(0xA0), " ", trim(utf8_decode($em->item(0)->textContent)));
$ads['currency'] = $currency.'.';
$strongObjs->item(0)->removeChild($em->item(0));
}
if ($strongObjs->length > 0) { // price
$price = str_replace(chr(0xC2).chr(0xA0), "", trim(utf8_decode($strongObjs->item(0)->textContent)));
$ads['price'] = $price;
}
...
return $ads;
}
Я предполагаю, что это может быть связано с локалями языковых настроек раскладки клавиатуры у пользователя публиковавшего объявление...
Как решить эту проблему?
Попробуйте так:
$dom->loadHTML(mb_convert_encoding($html,'HTML-ENTITIES','UTF-8'));
И далее по коду не используйте преобразования кодировок.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей