сломался парсер xml, хелп!

Тема в разделе "PHP", создана пользователем guru85, 4 авг 2011.

Модераторы: latteo
  1. guru85

    guru85 Постоялец

    Регистр.:
    24 мар 2010
    Сообщения:
    134
    Симпатии:
    3
    вот собственно парсер
    PHP:
    $xml = new SimpleXMLElement("http://www.igromania.ru/rss/news.rss"NULLTRUE);

    $http = new s_http();
        
    $http->init();

    Clear_array_empty($xml->channel->item);
    foreach (
    $xml->channel->item as $item) {

     

    $link=($item->link);
    }
    а вот error
    PHP:
    WarningSimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: http://www.igromania.ru/rss/news.rss:3: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xCD 0xCE 0xC2 0xCE in Y:\home\localhost\www\test\rssfeedpars\rssparser.php on line 8

    WarningSimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: <title>igromania.ruНОВОСТИ04.08.2011</titlein Y:\home\localhost\www\test\rssfeedpars\rssparser.php on line 8

    Warning
    SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: ^ in Y:\home\localhost\www\test\rssfeedpars\rssparser.php on line 8

    Fatal error
    Uncaught exception 'Exception' with message 'String could not be parsed as XML' in Y:\home\localhost\www\test\rssfeedpars\rssparser.php:8 Stack trace#0 Y:\home\localhost\www\test\rssfeedpars\rssparser.php(8): SimpleXMLElement->__construct('http://www.igro...', 0, true) #1 {main} thrown in Y:\home\localhost\www\test\rssfeedpars\rssparser.php on line 8
    раньше все работало, но видимо что то изменилось с кодировкой на фиде
     
  2. Alexanderod

    Alexanderod Создатель

    Регистр.:
    15 янв 2009
    Сообщения:
    49
    Симпатии:
    11
    1) проверь включено ли extension=php_openssl.dll
    2) если настройки не менялось и пункт 1 включен - пересохрани скрипт в новой кодировке фида (в нотепад++ можно сделать)
    или стучись ко мне - помогу, если не буду занят))
     
  3. guru85

    guru85 Постоялец

    Регистр.:
    24 мар 2010
    Сообщения:
    134
    Симпатии:
    3
    не выходит, скрипт в кодеровке windows-1251 такой жк как и фид, а где пункт 1 посмотреть не знаю, php конфиге на хосте такого пункта не нашел.
     
  4. Alexanderod

    Alexanderod Создатель

    Регистр.:
    15 янв 2009
    Сообщения:
    49
    Симпатии:
    11
    в php.ini
    судя по пути в ошибке - это локальный денвер?
     
    guru85 нравится это.
  5. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    890
    Симпатии:
    562
    Alexanderod Причём тут вообще php_openssl.dll ? Текст ошибки нужно внимательней читать. Там тупо говорится что кодровка не утф по этому пропарсить не получилось.

    Простое решение.
    PHP:
    $xml = new SimpleXMLElement(iconv('cp1251''utf-8'file_get_contents("http://www.igromania.ru/rss/news.rss")) ); 
     
    guru85 нравится это.
  6. Alexanderod

    Alexanderod Создатель

    Регистр.:
    15 янв 2009
    Сообщения:
    49
    Симпатии:
    11
    эти функции вообще с вин-1251 работают?
    лень гуглить.
    replace вроде только утф8 обрабатывает, тут так же?
     
    guru85 нравится это.
  7. guru85

    guru85 Постоялец

    Регистр.:
    24 мар 2010
    Сообщения:
    134
    Симпатии:
    3
    а я ведь применял iconv, но видимо где то ошибся, в таком виде заработало, но вот вопрос, почему раньше работала, остается открытым, видимо поменяли кодировку.
     
  8. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.035
    Симпатии:
    703
    по вашему дак вообще php работает только с utf-8, все функции прекрасно работают и с win просто надо применять их воовремя и следить чтобы кодировки документа и данных совпадали
    видимо раньше кодировка ленты была утф
     
  9. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    890
    Симпатии:
    562
    видимо лень не только гуглить но и думать... непонятночто написал. кодировка критична в некоторых функциях, в некоторых нет..