大家好,我用php加載nusoap做了一個webservice ,然后用pb12去呼叫,現在也能呼叫成功,但有個問題就是:
1、php回傳英文沒有問題,但回傳中文就是亂碼
2、pb傳遞給php也是亂碼。
我已經試過用
iconv("GB2312","UTF-8",$n_title); 和 iconv("GBK","UTF-8",$n_title);
iconv("UTF-8","GB2312",$n_title); 和 iconv("UTF-8","GBK",$n_title);
都不行。我的php頁面的格式是:

uj5u.com熱心網友回復:
這個是可以轉的,不曉得你接收的是什么型別的,string還是blob,如果是blob直接用String ( blob {,encoding} )encoding 指定為EncodingUTF8!,
如果是string,就用Blob ( text {, encoding} )encoding 指定為EncodingUTF8! 現轉成blob,再用String ( blob {,encoding} )encoding 指定為EncodingUTF8!轉成string.
原來我決議html,有亂碼就是這么干的
uj5u.com熱心網友回復:
如果是這樣的話,php回傳ls_string="我是誰",然后pb中
Blb = Blob(ls_string, EncodingANSI!)
ls=String ( Blb ,EncodingANSI! )
ls在pb中就是可識別的漢字了嗎?
uj5u.com熱心網友回復:
{, encoding}必須是你接收的資料的編碼型別,如果你接收的是EncodingUTF8!,而你用EncodingANSI!,結果就是繼續是亂碼uj5u.com熱心網友回復:
嘻嘻,還是沒大明白,比如說pb中變數是
string ls_old,ls_new
ls_old="pb漢字顯示正常"
//要讓Php中接收的時候是utf8 ,那在pb中是不是要進行如下操作?
Blb = Blob(ls_old, EncodingUTF8!)
ls_new=String ( Blb ,EncodingUTF8! )
然后ls_new 就是utf8的字符集了?直接給php就行了??,感覺不大對呀
uj5u.com熱心網友回復:
1、php回傳英文沒有問題,但回傳中文就是亂碼2、pb傳遞給php也是亂碼
這兩個問題分開說,
1、php回傳英文沒有問題,但回傳中文就是亂碼。
這個就是說你接收的資料是亂碼,你要知道你接收的資料是什么編碼的,這里假定是UTF8!,
如果你是用blob接收的資料,那么String ( Blb ,EncodingUTF8! )就可以轉了。
如果你是用string接收的資料,那么Blob(ls_old, EncodingUTF8!)這樣轉成的blob就是UTF8的blob,然后用String ( Blb ,EncodingUTF8! )轉。這里呼叫{, encoding}必須是一致的。
2、pb傳遞給php也是亂碼,
這里最好是傳遞二進制資料,不要傳遞string,假設ls_string是你要傳遞的資料
先用Blob(ls_string , EncodingUTF8!)轉成blob,然后傳遞
uj5u.com熱心網友回復:
因為pb12里string是unicode的,不存在其他編碼的情況,而blob是二進制資料,可以是EncodingANSI!EncodingUTF8!
EncodingUTF16LE!
EncodingUTF16BE!
這四種編碼的二進制值
uj5u.com熱心網友回復:
與樓主同樣的問題,不過我是用PB做WS給php程式員呼叫,PHP環境用的也是nusoap組件,不管我在PB怎么轉碼,PHP程式員反饋說一遇上有中文就亂碼,只能英文字符集uj5u.com熱心網友回復:
我用的是第一種方法,php回傳utf8字串,Pb接受字串,代碼,如下1,

2,

3,
uj5u.com熱心網友回復:
自己結個貼吧,測驗了下,問題是好了,不過還是有疑惑。問題是這樣解決的,在soap配置中加入了以下代碼:
$soap->soap_defencoding = 'UTF-8';
$soap->decode_utf8 = false;
$soap->xml_encoding = 'UTF-8';
然后php發出去的統一定為utf8格式,pb接受過來就是漢字,完全不用在pb里面再處理了。但我不明白,上面那段話難道不是把傳出的字符集定義為 utf8,嗎?難道傳給pb的時候自動處理了????
詳細代碼如下
//----------------------php
<?php
require_once("nusoap/lib/nusoap.php");
include('function.php');
$namespace = "www.baidu.com";
$server = new soap_server();
$server->soap_defencoding = 'UTF-8';
$server->decode_utf8 = false;
$server->xml_encoding = 'UTF-8';
$server->configureWSDL("HelloExample",$namespace);
$server->register('send',
array("platform"=>"xsd:string"),
array("return"=>"xsd:string"),
$namespace);
function send($platform){
$res="我怕個";
$res=auto_charset($res,'gbk','utf-8'); //取決于php檔案時什么格式的,如果是utf8格式的,則不需要此功能
return $res;
}
$POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA'])
? $GLOBALS['HTTP_RAW_POST_DATA'] : '';
// pass our posted data (or nothing) to the soap service
$server->service($POST_DATA);
exit();
?>
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/48260.html
標籤:基礎類
上一篇:此題無解?
