специальный символ в php запросе мыла неправильно отображается в пакете xml out - PullRequest
0 голосов
/ 30 июня 2010

Я использую веб-сервис, который в моем запросе содержит символ ¥ (chr 0165). Я установил кодировку на своем мыльном клиенте:

$ soap = new MySoapClient ('address.wsdl', массив ('trace' => 1, 'encoding' => 'ISO-8859-1'));

Но когда я смотрю на мой исходящий пакет мыла, «¥» меняется на «¥ ¥»

Я не очень хорош в кодировании, но я пробовал несколько разных комбинаций, используя UTF8-ENCODE и т. Д., Но безрезультатно ... Я просто хочу, чтобы мой пакет исходящего мыла показывал "¥" для каждого "¥ "в моей строковой переменной.

Обновление:

Я все еще должен делать что-то не так ... когда я добавляю utf8_decode ("моя строка с ¥") и оставляю кодировку, как указано:

$ soap = new MySoapClient ('address.wsdl', массив ('trace' => 1, 'encoding' => 'ISO-8859-1'));

Я все еще получаю «мою строку с ¥» в качестве параметра в моем исходящем мыльном пакете.

если я пропущу часть кодирования в:

$ soap = new MySoapClient ('address.wsdl', массив ('trace' => 1, 'encoding' => 'ISO-8859-1'));

в сочетании с utf8_decode («моя строка с ¥») я получаю следующую ошибку мыла:

SOAP-ERROR: Кодировка: строка "my string with ¥" не является допустимой строкой utf-8 .....

Есть предложения?

1 Ответ

1 голос
/ 30 июня 2010

Вы передаете кодировку UTF-8 YEN SIGN , но сообщаете службе, что она закодирована как ISO-8859-1.

В UTF-8 этот символ кодируется в двабайты: 0xC2 и 0xA5.

В ISO-8859-1 эти два байта декодируются в два отдельных символа, LATIN CAPITAL LETTER A WITH CIRCUMFLEX и YEN SIGN соответственно.

Чтобы это исправить, попробуйте применить utf8_decode к значению, прежде чем использовать его в вызове SOAP.

...