2012-09-23 46 views
3

我想用PHP的SOAP客户端。没关系,因为我只知道它。但是当Data contains Special Character里面有问题。具有特殊字符(编码)的PHP SOAP客户端?

  • 特殊字符如里面。 (它来作为数据十六进制代码。)

下面是示例:

header('Content-Type: text/plain; charset=UTF-8'); 
$client = new SoapClient('http://www.example.com/webservice.asmx?WSDL', array('trace' => 1, 'encoding'=>'UTF-8')); 

$result_1 = $client->GetText(); 
$result_2 = $client->GetText_withSpecialCharacter(); //Data contains `` hex-code (♫ Special Character) 

var_dump($result_1); 
var_dump($result_2); 
  • 总是$result_1正常
  • 但是,NEVER得到$result_2 (它总是返回空白)

请问我该怎么处理它?

回答

0

您可以尝试的编码设置为UTF-8

$client = new SoapClient('http://www.example.com/webservice.asmx?WSDL', array('trace' => 1, 'encoding'=>' UTF-8')); 
+0

不,我已经试过了。 ( –

+0

)你是否找到了这个问题的答案? – Notflip

0

尝试

$result_1 = urldecode($client->GetText()); 
$result_2 = urldecode($client->GetText_withSpecialCharacter()); 
+0

仍然无法正常工作,它甚至会在已经​​工作的'$ result_1'中返回'NULL'每当我把'urldecode','htmlspecialchars_decode','htmlentities'等包装soap函数在那里调用,它总是返回'NULL' :( –

0

也许你可以试试这个:

$myString = $client->GetText_withSpecialCharacter(); 
$result_2 = urldecode($myString); 
if ($myString != urlencode($result_2)) { 
    $result_2 = mb_convert_encoding($myString, "UTF-8", mb_detect_encoding($myString,"auto",true)); 
} 
0

的问题是,已经RY老,但有一个解决方案:

$result_2 = html_entity_decode($client->GetText_withSpecialCharacter(), ENT_QUOTES | ENT_XML1); 

似乎并没有一个有效的UTF-8字符。 0xE是移出字符。