Проблема с кодировкой при парсинге

362
21 февраля 2017, 19:55

Я написал парсер сайта 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;
}

Я предполагаю, что это может быть связано с локалями языковых настроек раскладки клавиатуры у пользователя публиковавшего объявление...

Как решить эту проблему?

Answer 1

Попробуйте так:

$dom->loadHTML(mb_convert_encoding($html,'HTML-ENTITIES','UTF-8'));

И далее по коду не используйте преобразования кодировок.

READ ALSO
сделать скроллер категорий нв cs cart [требует правки]

сделать скроллер категорий нв cs cart [требует правки]

Привет всем! как сделать скроллер для категорий на cs cart?

337
ICU и date дают разные результаты

ICU и date дают разные результаты

Не думаю, что проблема в самом фреймворке, но проблема вот в чем:

309
Чем заменить класс String в PHP 7?

Чем заменить класс String в PHP 7?

Устанавливаю в проект laravel 51 админку sleeping-owl 2 (http://sleeping-owl

414
Вывести в отдельный массив все строки, состоящие из двух слов

Вывести в отдельный массив все строки, состоящие из двух слов

Нужно вывести в отдельный массив всех животных, чьи названия состоят из 2х слов

243