[Инфо] Исправление ошибок при постинге в xml формате

Тема в разделе "Wordpress", создана пользователем ReBeL, 29 июн 2009.

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

    ReBeL Злобный старикашка

    Регистр.:
    3 май 2006
    Сообщения:
    1.564
    Симпатии:
    851
    Наткнулся на информацию, как победить проблему с искажением постов, публикуемых с помощью Windows Live Writer.
    Надеюсь, что кому-нибуть поможет.

    На самом деле проблема с библиотеками libxml2.
    Существует несколько вариантов исправления данной ошибки:

    Вот один из вариантов:

    Исправить три файла :

    • / wp-admin/import/blogger.php - function parse ($ xml)
    • /wp-includes/rss.php -- function MagpieRSS ($source)
    • /wp-includes/class-IXR.php -- function parse()
    PHP:
     //----------------------------------------------- //-----------------------------------------------
     // /wp-admin/import/blogger.php 913-935 / / / Wp-admin/import/blogger.php 913-935
     //----------------------------------------------- //-----------------------------------------------
         
    function  parse $xml ) { function parse ($ xml) (
             global 
    $app_logging ; global $ app_logging;
             
    array_unshift $this -> ns_contexts , array ( ) ) ; array_unshift ($ this -> ns_contexts, array ());
             
    $parser xml_parser_create_ns ( ) ; $ parser xml_parser_create_ns ();
             
    xml_set_object $parser $this ) ; xml_set_object ($ parser, $ this);
             
    xml_set_element_handler $parser "start_element" "end_element" ) ; xml_set_element_handler ($ parser"start_element""end_element");
             
    xml_parser_set_option $parser XML_OPTION_CASE_FOLDING ) ; xml_parser_set_option ($ parserXML_OPTION_CASE_FOLDING0);
             
    xml_parser_set_option $parser XML_OPTION_SKIP_WHITE ) ; xml_parser_set_option ($ parserXML_OPTION_SKIP_WHITE0);
             
    xml_set_character_data_handler $parser "cdata" ) ; xml_set_character_data_handler ($ parser"CDATA");
             
    xml_set_default_handler $parser "_default" ) ; xml_set_default_handler ($ parser"_default");
             
    xml_set_start_namespace_decl_handler $parser "start_ns" ) ; xml_set_start_namespace_decl_handler ($ parser"start_ns");
             
    xml_set_end_namespace_decl_handler $parser "end_ns" ) ; xml_set_end_namespace_decl_handler ($ parser"end_ns");
             
    $contents "" ; $ contents "";
             
    //xmllib 2.7.0 -2.7.3 stripping leading angle brackets bug patch / / xmllib 2.7.0 -2.7.3 stripping leading angle brackets bug patch
             
    $xml str_replace "<" "<" $xml ) ; $ xml str_replace "<""<", $ xml);
             
    $xml str_replace ">" ">" $xml ) ; $ xml str_replace ">"">", $ xml);
             
    $xml str_replace "&" "&" $xml ) ; $ xml str_replace "&""&", $ xml);
             
    //end Fix / / end Fix
             
    xml_parse $parser $xml ) ; xml_parse ($ parser, $ xml);
             
    xml_parser_free $parser ) ; xml_parser_free ($ parser);
             return 
    true ; return true;
         } )
    Патчим следующий файл:
    PHP:
     //----------------------------------------------- //-----------------------------------------------
     // /wp-includes/rss.php 49-90 / / / Wp-includes/rss.php 49-90
     //----------------------------------------------- //-----------------------------------------------
         
    function  MagpieRSS $source ) { function MagpieRSS ($ source) (
             
    # if PHP xml isn't compiled in, die # If PHP xml isn't compiled in, die
             # #
             
    if ( ! function_exists 'xml_parser_create' ) ) if (! function_exists 'xml_parser_create'))
                 
    trigger_error "Failed to load PHP's XML Extension. http://www.php.net/manual/en/ref.xml.php" ) ; trigger_error "Failed to load PHP's XML Extension. http://www.php.net/manual/en/ref.xml.php");
             
    $parser = @ xml_parser_create ( ) ; $ parser = @ xml_parser_create ();
             if ( ! 
    is_resource $parser ) ) if (! is_resource ($ parser))
                 
    trigger_error "Failed to create an instance of PHP's XML parser. http://www.php.net/manual/en/ref.xml.php" ) ; trigger_error "Failed to create an instance of PHP's XML parser. http://www.php.net/manual/en/ref.xml.php");
             
    $this -> parser $parser ; $ this -> parser = $ parser;
             
    # pass in parser, and a reference to this object # Pass in parser, and a reference to this object
             # setup handlers # Setup handlers
             # #
             
    xml_set_object $this -> parser $this ) ; xml_set_object ($ this -> parser, $ this);
             
    xml_set_element_handler $this -> parser xml_set_element_handler ($ this -> parser,
                     
    'feed_start_element' 'feed_end_element' ) ; 'feed_start_element''feed_end_element');
             
    xml_set_character_data_handler $this -> parser 'feed_cdata' ) ; xml_set_character_data_handler ($ this -> parser'feed_cdata');
             
    //xmllib 2.7.0 -2.7.3 stripping leading angle brackets bug patch / / xmllib 2.7.0 -2.7.3 stripping leading angle brackets bug patch
             
    $source str_replace "<" "<" $source ) ; $ source str_replace "<""<", $ source);
             
    $source str_replace ">" ">" $source ) ; $ source str_replace ">"">", $ source);
             
    $source str_replace "&" "&" $source ) ; $ source str_replace "&""&", $ source);
             
    //end fix / / end fix
             
    $status xml_parse $this -> parser $source ) ; $ Status xml_parse ($ this -> parser, $ source);
             if ( ! 
    $status ) { if (! $ status) (
                 
    $errorcode xml_get_error_code $this -> parser ) ; $ errorCode xml_get_error_code ($ this -> parser);
                 if ( 
    $errorcode !=  XML_ERROR_NONE ) { if ($ errorcode! = XML_ERROR_NONE) (
                     
    $xml_error xml_error_string $errorcode ) ; $ xml_error xml_error_string ($ errorCode);
                     
    $error_line xml_get_current_line_number $this -> parser ) ; $ error_line xml_get_current_line_number ($ this -> parser);
                     
    $error_col xml_get_current_column_number $this -> parser ) ; $ error_col xml_get_current_column_number ($ this -> parser);
                     
    $errormsg $xml_error  at line $error_line , column $error_col " ; $ errormsg "$ xml_error at line $ error_line, column $ error_col";
                     
    $this -> error $errormsg ) ; $ this -> error ($ errormsg);
                 } )
             } )
             
    xml_parser_free $this -> parser ) ; xml_parser_free ($ this -> parser);
             
    $this -> normalize ( ) ; $ this -> normalize ();
         } )
    И последний
    PHP:
     //----------------------------------------------- //-----------------------------------------------
     // /wp-includes/class-IXR.php 159-185 / / / Wp-includes/class-IXR.php 159-185
     //----------------------------------------------- //-----------------------------------------------
         
    function  parse ( ) { function parse () (
             
    // first remove the XML declaration / / First remove the XML declaration
             
    $this -> message preg_replace '/<\?xml(.*)?\?' '>/' '' $this -> message ) ; $ this -> message preg_replace '/ <\? xml (.*)? \?''> /','', $ this -> message);
             if ( 
    trim $this -> message ) == '' ) { if (trim ($ this -> message) =='') (
                 return 
    false ; return false;
             } )
             
    $this -> _parser xml_parser_create ( ) ; $ this -> _parser xml_parser_create ();
             
    // Set XML parser to take the case of tags in to account / / Set XML parser to take the case of tags in to account
             
    xml_parser_set_option $this -> _parser ,  XML_OPTION_CASE_FOLDING false ) ; xml_parser_set_option ($ this -> _parserXML_OPTION_CASE_FOLDINGfalse);
             
    // Set XML parser callback functions / / Set XML parser callback functions
             
    xml_set_object $this -> _parser $this ) ; xml_set_object ($ this -> _parser, $ this);
             
    xml_set_element_handler $this -> _parser 'tag_open' 'tag_close' ) ; xml_set_element_handler ($ this -> _parser'than ever''MacTAG_CLOSE');
             
    xml_set_character_data_handler $this -> _parser 'cdata' ) ; xml_set_character_data_handler ($ this -> _parser'CDATA');
             
    //xmllib 2.7.0 -2.7.3 stripping leading angle brackets bug patch / / xmllib 2.7.0 -2.7.3 stripping leading angle brackets bug patch
             
    $this -> message str_replace "<" "<" $this -> message ) ; $ this -> message str_replace "<""<", $ this -> message);
             
    $this -> message str_replace ">" ">" $this -> message ) ; $ this -> message str_replace ">"">", $ this -> message);
             
    $this -> message str_replace "&" "&" $this -> message ) ; $ this -> message str_replace "&""&", $ this -> message);
             
    //end fix / / end fix
             
    if ( ! xml_parse $this -> _parser $this -> message ) ) { if (! xml_parse ($ this -> _parser, $ this -> message)) (
                 
    /* die(sprintf('XML error: %s at line %d', / * Die (sprintf ( 'XML error:% s at line% d',
                     xml_error_string(xml_get_error_code($this->_parser)), xml_error_string (xml_get_error_code ($ this-> _parser)),
                     xml_get_current_line_number($this->_parser))); */ 
    xml_get_current_line_number ($ this-> _parser))); * /
                 return 
    false ; return false;
             } )
             
    xml_parser_free $this -> _parser ) ; xml_parser_free ($ this -> _parser);
             
    // Grab the error messages, if any / / Grab the error messages, if any
             
    if ( $this -> messageType == 'fault' ) { if ($ this -> messageType == 'fault') (
                 
    $this -> faultCode $this -> params ] [ 'faultCode' ] ; $ this -> faultCode = $ this -> params [0] [ 'faultCode'];
                 
    $this -> faultString $this -> params ] [ 'faultString' ] ; $ this -> faultString = $ this -> params [0] [ 'faultString'];
             } )
             return 
    true ; return true;
         } )
     
    crazyyy и carlitoz нравится это.
  2. crazyyy

    crazyyy

    Регистр.:
    26 ноя 2007
    Сообщения:
    174
    Симпатии:
    149
    Насколько я понял проблема была в исчезании тегов хтмл верстки при отсылке текста из WLW на сервер.
    Информация полезная, но без конкретики найти на форуме ёё будет сложновато. Потому я и отписался.
    UPD
    g-prime шустрый;)
    Вообще это проблема вроде в xml-rpc. Так что это проблема вообще любого постинга при каких-то там условиях.
    Извините за расплывчатость - нет возможности сейчас уточнить
     
  3. melmaxx

    melmaxx Постоялец

    Регистр.:
    1 май 2008
    Сообщения:
    131
    Симпатии:
    7
    xml-rpc у wordpress очень баговатый. Я пробовал туда запостить скриптом много раз и только с н-ной попытки получилось отправить текст на русском и получить нормальный пост в нужной кодировке. Но попробовав то же самое на другом сервере - получил кракозябры. Устал бороться и пошел в сторону sql-команд.
     
Статус темы:
Закрыта.