Привет! У меня есть веб-сервис, созданный с использованием 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>
Как мне решить эту проблему?
Спасибо
Как насчет изменения настроек кодировки:
СЕРВЕР:
$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, у меня была похожая проблема, так что это помогло мне, поэтому он проверен
Сегодня я столкнулся с той же проблемой - код, который вызвал эту проблему:
$request->Text = substr($text, 0, 40);
Изменение substr на mb_substr, похоже, решает проблему:
$request->Test = mb_substr($text, 0, 40, 'utf8');
Ответы, приведенные выше, побуждают меня попробовать:
// encode in UTF-8 $string = utf8_encode($string);
, что также разрешило ошибку для меня.
Ссылка: utf8_encode ()
Проблема в том, что í! = I.Попробуйте преобразовать вашу строку в UTF-8 перед использованием в запросе.Это может выглядеть так:
$string = iconv('windows-1252', 'UTF-8', $string);
См. http://php.net/iconv
Я обнаружил, что в моем случае проблема заключалась не в кодировании строк, а в том, что сам файл не был сохранен как UTF-8.Даже явное сохранение с кодировкой UTF-8 не помогло.
Для меня это работало, чтобы вставить комментарий с символом UTF-8 как // Å
// Å
Я исправил такую проблему, используя mb_convert_encoding с array_walk_recursive , чтобы перейти к моим параметрам POST с именем $ params (массив).
Может быть, это полезно для вас:
array_walk_recursive($params,function (&$item){ $item = mb_convert_encoding($item, 'UTF-8'); });