Php Nusoap 因拉丁字符而失败
Php Nusoap fails with latin characters
我正在开发一个使用 Nusoap 发送 xml 数据的网络服务,这次我必须发送带有拉丁字符(如“ó”)的数据。但是,当我将它放入 soap 客户端时,它会停止工作。以下是正在开发的代码摘要,用于测试使用拉丁字符发送 xml。
这是正在开发的服务器代码摘要:
include_once("nusoap/nusoap.php");
$server = new soap_server();
$server->configureWSDL("PersonImport","urn:PersonImport");
$server->register("PersonImport",array("login" => "xsd:string", 'senha' => 'xsd:string', 'fornecedor' => 'xsd:string'),array("return" => "xsd:string"),"urn:PersonImport","urn:PersonImport#PersonImport");
function PersonImport($login,$senha,$fornecedor) {
//Just for debug purposes
$return = "My login Is <b>".$login . "</b> And My senha Is <b>".$senha."</b> And My fornecedor Is <b>".$fornecedor."</b>.";
(...)(ommited code, xml parsing and response xml generation)
return $return;
}
这是客户端代码的摘要:
<?php
require_once("nusoap/nusoap.php");
$client = new soapclient("example.com?wsdl");
$xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>";
$xml .= "<fornecedor>";
$xml .= "<NAME1>Gian</NAME1>";
$xml .= "<MCOD1>Giancarlo SA</MCOD1>";
$xml .= "<STCD1>80048303000113</STCD1>";
$xml .= "<STCD2>55670185501</STCD2>";
$xml .= "<STCD3>5508150087</STCD3>";
$xml .= "<RG>359730553</RG>";
$xml .= "<STRAS>rua itororó</STRAS>";
$xml .= "<HOUSE_NUM1>81</HOUSE_NUM1>";
$xml .= "<HOUSE_NUM2>301</HOUSE_NUM2>";
$xml .= "<ORT02>Menino Deus</ORT02>";
$xml .= "<PSTLZ>90110290</PSTLZ>";
$xml .= "<REGIO>RS</REGIO>";
$xml .= "<ORT01>Porto Alegre</ORT01>";
$xml .= "<TELF1>32335675</TELF1>";
$xml .= "<TELFX>32335675</TELFX>";
$xml .= "<SMTP_ADDR>teste@teste.com</SMTP_ADDR>";
$xml .= "<ERDAT>2016-10-04</ERDAT>";
$xml .= "<ChangeData>2016-10-04</ChangeData>";
$xml .= "<StartData>2016-10-04</StartData>";
$xml .= "<OffData>2016-10-04</OffData>";
$xml .= "</fornecedor>";
$result = $client->PersonImport("login","password", $xml);
echo $result;
行
$xml .= "<STRAS>rua itororó</STRAS>";
有特殊的性格。如果我删除 'ó' 字符,它就会起作用。
我尝试在 xml 上设置编码:
$xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>";
当我不得不使用 SimpleXML 解析器解析 xml 时,这对我有用,但它在 soap 上不起作用。
我尝试将页面的 header 设置为 utf8 或 ISO-8859-1,如下所示:
header("Content-type:text/html; charset=UTF-8");
或:
header ('Content-type: text/html; charset=ISO-8859-1');
我尝试使用 htmlentities,但“ó”的实体是“&o a c u t e;”其中有特殊字符'&'然后发生同样的问题。
函数序列化没有解决问题。
我直到现在才在 google 上找到答案。
是否可以使用 nusoap 传递拉丁特殊字符?一定有办法的。
看来我找到了办法。使用 CDATA 我可以转义“&”,所以我可以在字符串上使用 htmlentities,如下所示:
$xml .= "<STRAS><![CDATA[".htmlentities("Rua Itororó")."]]></STRAS>";
我正在开发一个使用 Nusoap 发送 xml 数据的网络服务,这次我必须发送带有拉丁字符(如“ó”)的数据。但是,当我将它放入 soap 客户端时,它会停止工作。以下是正在开发的代码摘要,用于测试使用拉丁字符发送 xml。
这是正在开发的服务器代码摘要:
include_once("nusoap/nusoap.php");
$server = new soap_server();
$server->configureWSDL("PersonImport","urn:PersonImport");
$server->register("PersonImport",array("login" => "xsd:string", 'senha' => 'xsd:string', 'fornecedor' => 'xsd:string'),array("return" => "xsd:string"),"urn:PersonImport","urn:PersonImport#PersonImport");
function PersonImport($login,$senha,$fornecedor) {
//Just for debug purposes
$return = "My login Is <b>".$login . "</b> And My senha Is <b>".$senha."</b> And My fornecedor Is <b>".$fornecedor."</b>.";
(...)(ommited code, xml parsing and response xml generation)
return $return;
}
这是客户端代码的摘要:
<?php
require_once("nusoap/nusoap.php");
$client = new soapclient("example.com?wsdl");
$xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>";
$xml .= "<fornecedor>";
$xml .= "<NAME1>Gian</NAME1>";
$xml .= "<MCOD1>Giancarlo SA</MCOD1>";
$xml .= "<STCD1>80048303000113</STCD1>";
$xml .= "<STCD2>55670185501</STCD2>";
$xml .= "<STCD3>5508150087</STCD3>";
$xml .= "<RG>359730553</RG>";
$xml .= "<STRAS>rua itororó</STRAS>";
$xml .= "<HOUSE_NUM1>81</HOUSE_NUM1>";
$xml .= "<HOUSE_NUM2>301</HOUSE_NUM2>";
$xml .= "<ORT02>Menino Deus</ORT02>";
$xml .= "<PSTLZ>90110290</PSTLZ>";
$xml .= "<REGIO>RS</REGIO>";
$xml .= "<ORT01>Porto Alegre</ORT01>";
$xml .= "<TELF1>32335675</TELF1>";
$xml .= "<TELFX>32335675</TELFX>";
$xml .= "<SMTP_ADDR>teste@teste.com</SMTP_ADDR>";
$xml .= "<ERDAT>2016-10-04</ERDAT>";
$xml .= "<ChangeData>2016-10-04</ChangeData>";
$xml .= "<StartData>2016-10-04</StartData>";
$xml .= "<OffData>2016-10-04</OffData>";
$xml .= "</fornecedor>";
$result = $client->PersonImport("login","password", $xml);
echo $result;
行
$xml .= "<STRAS>rua itororó</STRAS>";
有特殊的性格。如果我删除 'ó' 字符,它就会起作用。
我尝试在 xml 上设置编码:
$xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>";
当我不得不使用 SimpleXML 解析器解析 xml 时,这对我有用,但它在 soap 上不起作用。
我尝试将页面的 header 设置为 utf8 或 ISO-8859-1,如下所示:
header("Content-type:text/html; charset=UTF-8");
或:
header ('Content-type: text/html; charset=ISO-8859-1');
我尝试使用 htmlentities,但“ó”的实体是“&o a c u t e;”其中有特殊字符'&'然后发生同样的问题。
函数序列化没有解决问题。
我直到现在才在 google 上找到答案。
是否可以使用 nusoap 传递拉丁特殊字符?一定有办法的。
看来我找到了办法。使用 CDATA 我可以转义“&”,所以我可以在字符串上使用 htmlentities,如下所示:
$xml .= "<STRAS><![CDATA[".htmlentities("Rua Itororó")."]]></STRAS>";