Home >php教程 >php手册 >php 调用 webservice 中文乱码解决方案

php 调用 webservice 中文乱码解决方案

WBOY
WBOYOriginal
2016-05-25 16:57:541090browse

由于工作的需要,帮我的同事阿韬测试一下.net的webservice在PHP下的应用.于是开始上网找资料,发现很多php教程er都是用nusoap.于是下载一个回来.用它自带的例子修改一下.可在文章的后面的附件中找到下载地址.代码如下:

<?php
require_once (&#39;../nusoap/lib/nusoap.php&#39;);
$client = new soapclient(&#39;http://localhost/TestService/Service1.asmx?WSDL&#39;, true);
$err = $client->getError();
if ($err) {
    echo &#39;<h2>Constructor error</h2><pre class="brush:php;toolbar:false">&#39; . $err . &#39;
'; } // Doc/lit parameters get wrapped $param = array(     'str' => 'China' ); $result = $client->call('HelloWorld', array(     'parameters' => $param ) , '', '', false, true, 'document', 'encoded'); // Check for a fault if ($client->fault) {     echo '

Fault

';
    print_r($result);
    echo '
'; } else {     // Check for errors     $err = $client->getError();     if ($err) {         // Display the error         echo '

Error

' . $err . '
';     } else {         // Display the result         echo '

Result

';
        print_r($result);
        echo '
';     } } echo '

Request

' . htmlspecialchars($client->request, ENT_QUOTES) . '
'; echo '

Response

' . htmlspecialchars($client->response, ENT_QUOTES) . '
'; echo '

Debug

' . htmlspecialchars($client->debug_str, ENT_QUOTES) . '
';

如果我的webservice返回的内容中没有中文的话,则很简单就上面的例子就成功了.但是一个新的问题出现了,如果我的webservice中有中文的话,返回的值就变成了乱码.查看了一下response的结果,是正确的.应该是用nusoap处理的时候出现了问题.

由于我没有安装PHP断点调试工具(其实我都不知道有没有这个工具).所以只能一个方法,一个方法看.看了一天,终于看完了.更改了nusoap.php两个地方就OK了.

更改的地方:

86行的:var $soap_defencoding = 'UTF-8';

4998行的:var $decode_utf8 = false;

不更改也可以,不过在调用的时候就必须指定编码.

$client = new soapclient(&#39;http://localhost/TestService/Service1.asmx?WSDL&#39;, true); 
$client->soap_defencoding = &#39;UTF-8&#39;; 
$client->soap_defencoding = &#39;UTF-8&#39;;

这样的效果也是一样的,如果请求的时候参数有中文,只需用post或者get的方式传送就可以了,如果需要将带有中文的参数写在代码里面,则需要把编码转成UTF8.可能参考附件.

附件:

nusoap源文件: http://www.cnblogs.com/Files/coolstr/nusoap.zip

各种编码转换源文件: http://www.cnblogs.com/Files/coolstr/chinese.zip


教程网址:

欢迎收藏∩_∩但请保留本文链接。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn