[help] проблема с xml_parse

Тема в разделе "PHP", создана пользователем AgpeHaJIuH, 3 авг 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. AgpeHaJIuH

    AgpeHaJIuH Постоялец

    Регистр.:
    7 июл 2008
    Сообщения:
    67
    Симпатии:
    19
    Доброго времени суток!

    В общем, я юзаю MagpieRSS для импорта новостей с рсс. Все работает отлично, но если кодировка сайта не одна из этих 3 (UTF-8, US-ASCII, ISO-8859-1), предположим, WINDOWS-1251, парсер начинает ругаться.

    Я немного изменил код, добавив функцию iconv()

    PHP:

    function create_parser($source, $out_enc, $in_enc, $detect) {

            
            if (!$in_enc) {
                if (preg_match('/<?xml.*encoding=[\'"](.*?)[\'"].*?>/m', $source, $m)) {
                    $in_enc = strtoupper($m[1]);
                    $this->source_encoding = $in_enc;
                }
                else {
                    $in_enc = '';
                    echo "Error detecting input encoding<br>";
                }
                echo "Encoding: ".$in_enc."<br/>";
            }
            
            if ($this->known_encoding($in_enc)) {
                echo "Knowing encoding!!<br>";
                echo $source;
                return array(xml_parser_create('UTF-8'), $source);
            }
            
            // the dectected encoding is not one of the simple encodings php knows       
            // attempt to use the iconv extension to
            // cast the XML to a known encoding
           else{
            echo "Unknown encoding!!<br>";
            if (function_exists('iconv'))  {
                echo "iconv<br>";
                $encoded_source = iconv($in_enc,'UTF-8', $source);
                if ($encoded_source) {
                    $parser=xml_parser_create('UTF-8');
                    //echo "<br><hr>".$encoded_source;
                }
            }
            
            elseif(function_exists('mb_convert_encoding')) {
                $encoded_source = mb_convert_encoding($source, 'UTF-8', $in_enc );
                if ($encoded_source) {
                    $parser=xml_parser_create('UTF-8');
                }
            }
            }          
             
             $this->encoding = 'UTF-8';
             xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $out_enc);
            
            return array($parser, $encoded_source);
            
            //return array($parser, $encoded_source);
        }

    Все прекрасно конвертируется, но выскакивает ошибка xml_parse

    PHP:
    Warningxml_parse() [function.xml-parse]: input conversion failed due to input errorbytes 0x98 0xD0 0x9B 0xD0 in ***\magpierss\rss_parse.inc on line 127
    Никто не сталкивался с такой проблемой? Что вот это (bytes 0x98 0xD0 0x9B 0xD0) означает?

    Заранее спасибо :bc:
     
  2. B1rdEX

    B1rdEX Постоялец

    Регистр.:
    30 июн 2008
    Сообщения:
    141
    Симпатии:
    26
    Ошибка вылетает потому что проходят нечитабельные символы (те самые байты). Попробуй добавить в iconv в имя результирующей кодировки //TRANSLIT или //IGNORE

    Помогает при переводе юникода в вин1251, может и тебе..
     
Статус темы:
Закрыта.