2011-11-04 12 views
5

Hola, tengo un servicio web creado con Zend Framework. Uno de los métodos está destinado a enviar detalles sobre un pedido. Me encontré con algún problema de codificación. Uno de los valores que se devuelven contiene lo siguiente:SOAP-ERROR: Codificación: cadena ... no es una cadena válida utf-8

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

El servicio web está regresando el siguiente fallo:

<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> 

¿Cómo debe Voy sobre este problema?

Gracias

+1

problema se debe a una serie truncada por la base de datos. El campo se configuró en VARCHAR (50) y se truncó exactamente en el medio del valor codificado. Increíble jaja. –

Respuesta

9

Hoy me encuentro con el mismo problema - el código que causó el problema era:

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

cambiar substr a mb_substr parece resolver el problema :

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

Gracias, sí que funciona para mí –

4

El problema es que í! = I. Intenta convertir tu cadena a UTF-8 antes de usarla en una solicitud. Puede parecer que:

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

Ver http://php.net/iconv

+0

Bastante pero quiero poder enviar í y no convertirlo a ... porque es una dirección mexicana. –

+0

Se enviará como í, pero en la codificación UTF-8, no se preocupe. – silex

+0

Gracias, hombre, el poblem era una naturaleza completamente diferente. Gracias de todos modos :) –

14

¿Qué sucede al cambiar la configuración de codificación:

SERVIDOR:

$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 

... a continuación, la conversión se realiza automáticamente a UTF-8, que tenía el problema similar, así que esto me ayudó, por lo que es probado

+0

Muchas gracias. Eres un salvavidas ... –

2

Las respuestas anteriores me llevan a probar:

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

que también resolvió el error por mí.

Referencia: utf8_encode()

0

que fija un problema como este usando mb_convert_encoding con array_walk_recursive a caminar en mis parámetros POST, nombrados $ params (matriz).

Tal vez esto es útil para usted:

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

descubrí que en mi caso no la codificación de cuerdas era el problema, sino que el propio archivo no se ha guardado como UTF-8. Incluso el guardado explícito con codificación UTF-8 no ayudó.

Para mí trabajaron para insertar un comentario con un carácter UTF-8 como // Å

Cuestiones relacionadas