2011-11-04 5 views
5

Ciao Ho un servizio web creato utilizzando Zend Framework. Uno dei metodi è destinato a inviare dettagli su un ordine. Mi sono imbattuto in qualche problema di codifica. Uno dei valori da restituire contiene quanto segue:SOAP-ERROR: Encoding: string ... non è una stringa utf-8 valida

Jaime Torres Bodet # 322-A Col. Lomas de Santa María

Il webservice sta tornando il seguente difetto:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Body> 
     <SOAP-ENV:Fault> 
     <faultcode>SOAP-ENV:Server</faultcode> 
     <faultstring>SOAP-ERROR: Encoding: string 'Jaime Torres Bodet #322-A Col. Lomas de Santa Mar\xc3...' is not a valid utf-8 string</faultstring> 
     </SOAP-ENV:Fault> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

Come dovrebbe Vado su questo problema?

Grazie

+1

problema era dovuto ad una stringa troncata dal database. Il campo è stato impostato su VARCHAR (50) e troncato esattamente nel mezzo del valore codificato. Incredibile lol. –

risposta

9

Oggi mi imbatto in stesso problema - il codice che ha causato il problema era:

$request->Text = substr($text, 0, 40); 

cambiare substr per mb_substr sembra risolvere il problema :

$request->Test = mb_substr($text, 0, 40, 'utf8'); 
+0

Grazie, sì, funziona per me –

4

Il problema è che í! = I. Prova a convertire la stringa in UTF-8 prima di utilizzarla in una richiesta. Può sembrare che:

$string = iconv('windows-1252', 'UTF-8', $string); 

Vedi http://php.net/iconv

+0

Abbastanza giusto ma voglio essere in grado di inviare e non convertirlo in ... perché è un indirizzo messicano. –

+0

Verrà inviato come í, ma nella codifica UTF-8, non preoccuparti. – silex

+0

Grazie a uomo il poblem era una natura completamente diversa. Grazie comunque :) –

14

E cambiare le impostazioni di codifica:

SERVER:

$server = new SoapServer("some.wsdl", array('encoding'=>'ISO-8859-1')); // for 'windows-1252' too 

CLIENTE:

$server = new SoapClient("some.wsdl", array('encoding'=>'ISO-8859-1')); // for 'windows-1252' too 

... poi la conversione avviene automaticamente a UTF-8, ho avuto il problema simile, quindi questo mi ha aiutato, quindi è testato

+0

Grazie mille. Sei un risparmiatore di vita ... –

2

Le risposte di cui sopra mi portano a provare:

// encode in UTF-8 
$string = utf8_encode($string); 

che ha risolto anche l'errore per me.

Riferimento: utf8_encode()

0

ho risolto un problema come questo con mb_convert_encoding con array_walk_recursive a camminare nei miei parametri POST, dal nome $ params (array).

forse questo è utile per voi:

array_walk_recursive($params,function (&$item){ 
    $item = mb_convert_encoding($item, 'UTF-8'); 
}); 
0

ho scoperto che nel mio caso non è la codifica delle stringhe era il problema, ma che il file stesso non è stato salvato come UTF-8. Anche il salvataggio esplicito con la codifica UTF-8 non ha aiutato.

Per me ha funzionato per inserire un commento con un carattere UTF-8 come // Å