Проблемы со спецсимволами в php мыльном клиенте - PullRequest
1 голос
/ 28 августа 2009

У меня есть проблема, связанная с этим вопросом . У меня есть веб-сервис (также использующий php), который возвращает некоторые имена. Когда любой из них содержит шведские символы (å, ä или ö) и, возможно, другие, я получаю мыльную ошибку (похоже, у нас нет документа XML). Однако я могу увидеть полный (правильный afaik) ответ, используя $ soapcalo -> __ getLastResponse ().

Как мне обрабатывать специальные символы? Я попытался добавить атрибут кодировки (utf-8) на клиенте и сервере, но безуспешно.

Редактировать: Выдержка из мыльного ответа:

<?xml version="1.0" encoding="UTF-8"?>
 <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="...">
 <SOAP-ENV:Body>
  <ns1:callFunctionResponse>
   <ns1:Response>
    <ns1:result>success</ns1:result>
    <ns1:content>
     <Contact>
      <userName>VIB09SLA9EP</userName>
      <firstName>Patrik</firstName>
      <lastName>Stenstr&ouml;m</lastName>
     </Contact>
    </ns1:content>
   </ns1:Response>
  </ns1:callFunctionResponse>
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Спасибо!

Ответы [ 5 ]

4 голосов
/ 28 августа 2009

Просто дикая догадка: вы убедились, что имена на самом деле кодируются utf-8? Я думаю, что установка атрибута SOAP не изменит фактическую кодировку значений. Вы пытались использовать utf8_encode в именах перед возвратом их через SOAP?

3 голосов
/ 31 августа 2009

Хорошо, все - проблема наконец-то решена, думал, что выложу ее здесь для всех, у кого есть проблемы с similair. Как оказалось, проблема возникла ранее в процессе.

Содержимое ответа SOAP было сгенерировано при построении структуры с помощью DomDocument. Позже это было сохранено с помощью функции saveHTML. Оказывается, эта функция добавляет некоторые кодировки HTML, которые нарушают декодирование мыла на клиенте.

Когда вместо этого используется функция saveXML, ответ проходит успешно (также при добавлении тегов и других странных вещей) и также декодируется в правильные строки мыльным клиентом.

Я надеюсь, что это конец, но вы никогда не знаете :) 1007 *

Спасибо за помощь и +1 за помощь в проверке правильных мест.

/ Victor

2 голосов
/ 28 августа 2009

Не уверен, поможет ли это, но, возможно, рассмотрим сущности HTML ?

1 голос
/ 16 сентября 2010

Поскольку я задал этот вопрос в качестве первого результата во время поиска в Google «SoapClient неправильно декодирует данные utf8»

Моя проблема заключалась в том, что эти специальные символы, которые передавались по каналу с кодировкой UTF-8 и php SoapClient, не декодировали их правильно.

Это было исправлено путем изменения кодировки php-файлов, в которых мои классы имеют UTF-8.

0 голосов
/ 28 августа 2009

Является ли сервер SOAP сервером на базе Windows? Я заметил, что иногда серверы или приложения на базе Windows не отправляют UTF-8, а вместо этого отправляют cp1252.

В одном приложении, где у меня были специальные символы в этой кодировке, я просто запустил следующий код в моем выводе HTML:

<?php
print htmlentities($string, ENT_COMPAT, 'cp1252');

Чтобы гарантировать, что любые специальные символы были закодированы для вывода HTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...