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

Статус
В этой теме нельзя размещать новые ответы.

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:
Warning: xml_parse() [function.xml-parse]: input conversion failed due to input error, bytes 0x98 0xD0 0x9B 0xD0 in ***\magpierss\rss_parse.inc on line 127

Никто не сталкивался с такой проблемой? Что вот это (bytes 0x98 0xD0 0x9B 0xD0) означает?

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

Помогает при переводе юникода в вин1251, может и тебе..
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху