SOAP-ERROR: Кодировка: строка ... не является допустимой строкой utf-8 - PullRequest
6 голосов
/ 04 ноября 2011

Привет! У меня есть веб-сервис, созданный с использованием Zend Framework. Один из методов предназначен для отправки информации о заказе. Я столкнулся с проблемой кодировки. Одно из возвращаемых значений содержит следующее:

Хайме Торрес Боде # 322-полковник Ломас де Санта Мария

Веб-сервис возвращает следующую ошибку:

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

Как мне решить эту проблему?

Спасибо

Ответы [ 6 ]

16 голосов
/ 23 сентября 2012

Как насчет изменения настроек кодировки:

СЕРВЕР:

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

КЛИЕНТ:

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

... затем преобразование выполняется автоматически в UTF-8, у меня была похожая проблема, так что это помогло мне, поэтому он проверен

9 голосов
/ 24 января 2012

Сегодня я столкнулся с той же проблемой - код, который вызвал эту проблему:

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

Изменение substr на mb_substr, похоже, решает проблему:

$request->Test = mb_substr($text, 0, 40, 'utf8');
4 голосов
/ 28 января 2014

Ответы, приведенные выше, побуждают меня попробовать:

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

, что также разрешило ошибку для меня.

Ссылка: utf8_encode ()

4 голосов
/ 04 ноября 2011

Проблема в том, что í! = I.Попробуйте преобразовать вашу строку в UTF-8 перед использованием в запросе.Это может выглядеть так:

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

См. http://php.net/iconv

0 голосов
/ 26 августа 2015

Я обнаружил, что в моем случае проблема заключалась не в кодировании строк, а в том, что сам файл не был сохранен как UTF-8.Даже явное сохранение с кодировкой UTF-8 не помогло.

Для меня это работало, чтобы вставить комментарий с символом UTF-8 как // Å

0 голосов
/ 01 мая 2015

Я исправил такую ​​проблему, используя mb_convert_encoding с array_walk_recursive , чтобы перейти к моим параметрам POST с именем $ params (массив).

Может быть, это полезно для вас:

array_walk_recursive($params,function (&$item){
    $item = mb_convert_encoding($item, 'UTF-8');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...