【问题标题】:zend_soap_server utf-8 encoding does not workzend_soap_server utf-8 编码不起作用
【发布时间】:2013-08-31 13:42:00
【问题描述】:

我正在使用zend_soap_server 开发一个肥皂网络服务。 我使用Zend_Soap_AutoDiscover 自动生成我的网络服务的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"?>

我应该怎么做才能得到这个?

提前致谢。

【问题讨论】:

  • 您使用的是什么版本的 PHP 和 Zend Framework?我问的原因是因为我尝试了一个没有调用setMethod() 的简单测试,并且默认情况下我得到了编码属性。我正在运行 PHP 5.3.8 和 ZF 1.12。 PHP 版本可能很重要的原因是,Zend_Soap 和它的兄弟姐妹基本上只是 PHP 原生 SOAP 类的包装器。
  • 我使用的是 php 5.4.13 和 ZF 1.12
  • 哦,我刚刚意识到我不是在查看 WSDL 输出,而是查看请求和响应 XML,它们都包含编码。我有一个新想法,我将添加它作为您问题的潜在答案。

标签: php web-services zend-framework wsdl zend-soap


【解决方案1】:

我检查了 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>";

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

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

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

【讨论】:

    猜你喜欢
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    相关资源
    最近更新 更多