PHP SOAP Sunucu düzgün bir C # SOAP istemci UTF-8 dizeleri işlemez

2 Cevap

Ben bir C # tabanlı bir uygulama ile tüketmek (NuSOAP kullanarak) bir PHP SOAP sunucu var.

C # uygulaması bir istek gönderdiğinde, dizeleri UTF-8 olarak kodlanmış. Ben bayt dizileri geçerli bir UTF-8 olan bir ağ algılayıcısı kullanılarak doğrulanmıştır. PHP sonra alır ve veritabanına gönderebilir veya e-posta yoluyla göndermek Ancak, standart ASCII gibi, UTF kodlama bayt karakterler olarak kabul edilir basılmış gibi görünen.

Ben C # app SOAP sunucu UTF-8 alma ile aynı sorunu var. . NET yerine BYTE bir CHAR olarak her bayt yorumlar. Bir BYTE her CHAR dönüştürür ve daha sonra bir UTF-8 dizesi o dönüştürür ve mükemmel çalışıyor, küçük bir fonksiyon yazmak zorunda kaldım.

Soru, ben doğru MySQL ve mail() fonksiyonu için UTF-8 olarak gelen SOAP istekleri işlemek için PHP sunucu tarafında ne ihtiyacım var? I utf8_encode() ve utf8_decode() denedim ama bu dize bile kötü cendereye.

2 Cevap

Bütün gün bu mücadele sonra, ben bir çözüm buldum.

NuSOAP otomatik utf8_decode gelen SOAP istekleri koşuyordu. Ben bu özelliği devre dışı ve ben kullanılan emin yaptı sonra mysqli->set_charset('utf8') şimdi herşey çalışıyor gibi görünüyor.

Şimdi sadece. NET düzgün SOAP yanıtı dizeleri yorumlamak değil neden bilmek istiyorum ...

Dosya nusoap.php olarak, hat 5480 civarında, değiştirmek gerekir:

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

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

Bundan sonra, web hizmeti de bu böyle olacak:

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

Ve, satır 151 (nusoap.php) değişiklik:

//var $soap_defencoding = 'ISO-8859-1';
var $soap_defencoding = 'UTF-8';