Сервер PHP SOAP неправильно обрабатывает строки UTF-8 из клиента C # SOAP - PullRequest
1 голос
/ 16 января 2010

У меня есть сервер PHP SOAP (с использованием nuSOAP), который я использую с приложением на C #.

Когда приложение C # отправляет запрос, строки кодируются в кодировке UTF-8. Я проверил, используя сетевой анализатор, что байтовые последовательности являются действительными UTF-8. Однако, когда PHP получает их, и я отправляю их в базу данных или отправляю по электронной почте, кажется, что они напечатаны как стандартный ASCII, байты кодировки UTF обрабатываются как символы.

У меня та же проблема с приложением C #, получающим UTF-8 от сервера SOAP. .NET интерпретирует каждый байт как CHAR вместо BYTE. Мне пришлось написать небольшую функцию, которая преобразует каждый символ CHAR в байт, а затем преобразует его в строку UTF-8, и это прекрасно работает.

Вопрос в том, что мне нужно сделать на стороне сервера PHP для правильной обработки входящих SOAP-запросов как UTF-8 для MySQL и функции mail()? Я пробовал utf8_encode() и utf8_decode(), но они портят нить еще хуже.

Ответы [ 3 ]

1 голос
/ 16 января 2010

Поработав с этим весь день, я нашел решение.

nuSOAP автоматически запускал utf8_decode для входящих запросов SOAP. После того, как я отключил эту функцию и убедился, что использовал mysqli->set_charset('utf8'), теперь все работает.

Теперь я просто хотел бы знать, почему .NET не интерпретирует строки ответа SOAP должным образом ...

0 голосов
/ 02 августа 2013

В файле nusoap.php, около строки 5480, вы должны изменить:

ОТ: $xml = '<?xml version="1.0" encoding="ISO-8859-1"?>';

TO: $xml = '<?xml version="1.0" encoding="UTF-8"?>';

После этого ваш веб-сервис также будет выглядеть так:

<?xml version="1.0" encoding="UTF-8" ?>

И в строке 151 (nusoap.php) измените:

//var $soap_defencoding = 'ISO-8859-1';
var $soap_defencoding = 'UTF-8';
0 голосов
/ 16 января 2010

Вы можете использовать
$ server = new soap_server ();
$ server-> soap_defencoding = 'UTF-8';
для декодирования

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