[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
----------------------------------------