[PHP-users 9937] SOAP通信での文字コードについて

Shinji Hotta php-users@php.gr.jp
Mon, 9 Sep 2002 17:41:39 +0900


堀田です。

先日、Perl - PHPのSOAPでの通信で大変お世話になったんですが、
少し分からないことができたのでアドバイスをお願いします。

サーバー  test.cgi (Perl)
#!/usr/bin/perl -w
use SOAP::Transport::HTTP;
SOAP::Transport::HTTP::CGI
   ->dispatch_to('Test')
   ->handle;
package Test;
   sub returnString {
         $str = 'abcdefg';
         return $str;
   }

クライアント soap_client.php
<?php
require_once 'SOAP/Client.php';
$uri = 'http://http://192.168.7.148/cgi-bin/test.cgi';
$obj = new SOAP_Client($uri);
$result =$obj->call('returnString',array(),'http://192.168.7.148/Test');

print $result';
?>

として、soap_client.phpを実行する
表示が abcdefg とでてうまくいくんですけど、

サーバー側のプログラムの関数部分を
   sub returnString {
         $str = '日本語';
         return $str;
   }

にすると、文字化けが起こり日本語とうまく表示されませんでした。
そこで、返ってきた$resultの文字コードをmb_detect_encoding($result)で調べた結
果
$resultはASCIコードだと分かりました。
SOAPで日本語をやり取りするときには、GoogleAPIのようにUTF-8にエンコーディング
してからやらなければならないのでしょうか?
教えてください。

あと、引数のやり取りについてなんですが、
PHP同士のやり取りでは、
$result =$obj->call('returnString',array(),'http://192.168.7.148/Test');
の部分で、call関数の二つ目の引数であるarray()を
array("送信する関数の引数名"=>"引数")
とするとうまくいくようなんですが、
サーバーがPerlである場合は、
sub returnString ($hikisuu) {
    print $_[0];
}
のように引数名を書いてしまうとエラーが出てしまいました。
このような場合は、どのようにして引数を渡したらいいのでしょうか?
お願いします。

----------------------------------------
堀田真次 address:tj0012@mail4.doshisha.ac.jp
----------------------------------------