【问题标题】:PHP SOAP Client with Special Characters (Encoding)?带有特殊字符(编码)的 PHP SOAP 客户端?
【发布时间】:2012-09-23 14:06:00
【问题描述】:

我正在尝试使用 PHP 的 SOAP 客户端。没关系,因为我只知道它。但是Data contains Special Character里面的时候就有问题了。

  • 里面的特殊字符。 (它在数据中以十六进制代码 的形式出现。)

以下是示例:

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
  • 但是,从来没有得到$result_2(它总是返回空白)

请建议我该怎么处理它?

【问题讨论】:

    标签: php soap encoding special-characters soap-client


    【解决方案1】:

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

    例子

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

    【讨论】:

    • 你找到这个问题的答案了吗?
    【解决方案2】:

    试试

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

    【讨论】:

    • 还是不行。它甚至返回NULL 已经工作的$result_1。每当我放urldecodehtmlspecialchars_decodehtmlentities 等来包装soap 函数调用时,它总是返回NULL :(
    【解决方案3】:

    也许你可以试试这个:

    $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));
    }
    

    【讨论】:

      【解决方案4】:

      这个问题很老了,但有一个解决方案:

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

       似乎不是有效的 UTF-8 字符。 0xE 是移出字符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多