zend_soap_server utf-8编码不起作用


zend_soap_server utf-8 encoding does not work

我正在使用zend_soap_server开发一个soap Web服务。我使用Zend_Soap_AutoDiscover自动生成Web服务的wsdl。

这是代码

public function indexAction() { // my websrvice method
      $server = new Zend_Soap_Server("admin/webservice/wsdl");
      
      $server->setEncoding('UTF-8');
      $server->setClass('Webservice');
      $server->handle();
}
public function wsdlAction() { // my wsdl method
      $wsdl = new Zend_Soap_AutoDiscover();
      $wsdl->setClass('Webservice');
      $wsdl->setUri("/admin/webservice");
      $wsdl->handle();
}

我的问题是,当我查看生成的wsdl的源时,第一行是:

<?xml version="1.0"?>

但是我想要xml标签中的编码:

<?xml version="1.0" encoding="UTF-8"?>

我该怎么办才能得到这个?

提前Thx。

我检查了Zend Framework代码,发现WSDL的第一行是硬编码的:

    $wsdl = "<?xml version='1.0' ?>
            <definitions name='$name' targetNamespace='$uri'
                xmlns='http://schemas.xmlsoap.org/wsdl/'
                xmlns:tns='$uri'
                xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'
                xmlns:xsd='http://www.w3.org/2001/XMLSchema'
                xmlns:soap-enc='http://schemas.xmlsoap.org/soap/encoding/'
                xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'></definitions>";

上面的代码片段来自Zend/Soap/Wsdl.php的第91行。因此,解决问题的简单方法是修改上面代码的第一行,以包含编码:

    $wsdl = "<?xml version='1.0' encoding='UTF-8' ?>

我只是运行了这个代码,它达到了预期的结果。而且我也不会因为必须修改框架代码而过于担心。我有一组标准的补丁,从大约1.7开始,我就一直在ZF1的顶部运行,以修复一些我不同意的小问题。这就是开源的美妙之处——你不必向某家公司支付数千美元来更改一行代码!如果您升级到ZF1的下一个维护版本(假设有一个版本),请确保记住重新运行您的补丁。