2011-11-04 9 views
5

Witam Mam usługę sieciową zbudowaną przy użyciu Zend Framework. Jedna z metod służy do wysyłania szczegółowych informacji o zamówieniu. Wpadłem na jakiś problem z kodowaniem. Jedną z wartości zwracanych zawiera następujące elementy:SOAP-ERROR: Kodowanie: ciąg ... nie jest prawidłowym ciągiem utf-8

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

Webservice zwraca następujący błąd:

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

Jak powinien Czy podchodzę do tego problemu?

Dzięki

+1

problem został spowodowany ściętego ciągiem przez bazę danych. Pole zostało ustawione na VARCHAR (50) i zostało skrócone dokładnie w środku zakodowanej wartości. Niesamowite lol. –

Odpowiedz

9

Dzisiaj biegnę do samego problemu - Kod, który spowodował, że problemem było:

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

zmieniając substr do mb_substr wydaje się rozwiązać problem :

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

Dziękuję, tak to działa dla mnie –

4

Problem polega na tym, że í! = I. Spróbuj przekształcić ciąg znaków w kodowanie UTF-8 przed użyciem w żądaniu. Może to wyglądać tak:

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

Zobacz http://php.net/iconv

+0

Wystarczająco uczciwe, ale chcę być w stanie wysłać i nie konwertować go na ... ponieważ jest to meksykański adres. –

+0

Będzie wysyłany jako í, ale w kodowaniu UTF-8, nie martw się o to. – silex

+0

Dzięki temu człowiek poblem był zupełnie inną naturą. Dzięki i tak :) –

14

Co należy zmienić ustawienia kodowania:

SERVER:

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

KLIENT:

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

... następnie konwersja odbywa się automatycznie na UTF-8, miałem similiar problemu, więc to pomogło mi, tak to jest przetestowany

+0

Wielkie dzięki. Oszczędzasz życie ... –

2

powyższych odpowiedzi ołowiu mi spróbować:

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

, która również rozwiązała dla mnie błąd.

referencyjny: utf8_encode()

0

Naprawiłem problem takiego korzystania mb_convert_encoding z array_walk_recursive chodzić do moich parametrów Post, nazwanych $ params (tablica).

Może to jest przydatne dla Ciebie:

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

I okazało się, że w moim przypadku nie kodowanie ciągów był problem, ale że sam plik nie został zapisany jako UTF-8. Nawet jednoznaczne zapisywanie z kodowaniem UTF-8 nie pomogło.

Dla mnie to zadziałało, aby wstawić komentarz ze w UTF-8 charakteru jak // Å