Autor Zpráva
jval
Profil *
Zdravím mám, aplikaci, která by měla exportovat na sreality. Když ale v popisu použiji diakritiku, tak mi server vráti chybu:

addAdvert: Parser error:< Invalid character > (code: -503)

Zkusil jsem si tedy pomocí serialize vyjet co se odesílá na server a výsledný text byl:

Větší zděný byt o velikosti 3+1, plocha cca 74 m2, v OV, se dvěma sklepy, se nachází ve druhém nadzemním podlaží v Poděbradově ulici - klidná část města. Byt je v původním stavu včetně oken a kuchyňské linky. V koupelně je vybudovaný sprchový kout. V pokojích jsou parkety. Celkové poplatky jsou 3.500,- Kč + elektřina. Byt je volný - ihned k nastěhování. 

pokud jsem zapnul

$xmlrpc->request_charset_encoding="UTF-8";

tak už se sice inzerát na serveru uloží, ale s textem:

Větší zděný byt o velikosti 3+1, plocha cca 74 m2, v OV, se dvěma sklepy, se nachází ve druhém nadzemním podlaží v Poděbradově ulici - klidná část města. Byt je v původním stavu včetně oken a kuchyňské linky. V koupelně je vybudovaný sprchový kout. V pokojích jsou parkety. Celkové poplatky jsou 3.500,- Kč + elektřina. Byt je volný - ihned k nastěhování. 

Od technické podpory jsem dostal tip na ukázku kódu, kde ovšem tazatel má stejný problém jako já, takže jsem nepochopil jak mi tím chtěli pomoci.

Díky za jakékoliv nasměrování.


Chybka, v prvním případě to vypadá takto:
Kajman
Profil
Pokud není možné obrátit se na autora aplikace s prosbou o nápravu, zkuste najít problematické místo a zveřejnit zde jeho kód.
jval
Profil *
Třída která komunikuje se serverem je Tato, kterou mám upravenou. Verze xmlrpc knihovny je 2.2.2
$export = $_POST;
$export['advert_type'] = (int)$_GET['cid'];
$export['seller_id'] = (int)'61823';
$export['advert_rkid'] = (string)$id;
$session = new sreality;
$session->AddAdvert($export);
Funkce AddAdvert ve tříde sreality:
public function AddAdvert($data) {
        return ($this->ParameterizedCall("addAdvert", array(
            php_xmlrpc_encode($data)
        )));
    }
a funkce ParapetrizedCall:
    private function ParameterizedCall($command, $params) {
        
        array_unshift($params, $this->RenewSessionId());
        
        //!CALLBEGIN!
        $msg = new xmlrpcmsg($command, $params);
        
        $response = $this->client->send($msg);
        
        // nacteni vysledku
        if ($response->faultCode()) {
            
            //!CALLERR!
            $this->lastStatus = $response->faultCode();
            $this->lastStatusMessage = $response->faultString();
            $this->lastOutput = array();
            return FALSE;
        } else {
            
            //!CALLEND!
            $decodedresponse = php_xmlrpc_decode($response->value());
            $this->lastStatus = $decodedresponse['status'];
            $this->lastStatusMessage = $decodedresponse['statusMessage'];
            $this->lastOutput = $decodedresponse['output'];
            
            // pokud je status 200, je to OK
            return ($this->lastStatus == 200);
        }
    }



Jinak celá PHP aplikace je moje dílo.
Kajman
Profil
Kde nastane náhrada diakritiky těmi entitami?
jval
Profil *
Tak postupným exportováním $msg v různých fazích procesu jsem se dopracoval až k proměnné
$GLOBALS['xmlrpc_internalencoding']='ISO-8859-1';
a po změně na
$GLOBALS['xmlrpc_internalencoding']='UTF-8';
to již funguje.
Takže kdyby to někdo někdy řešil, tak nestačí na UTF-8 nastavit pouze request_charset_encoding.

Děkuji za pomoc.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: