2016-10-05 2 views
0

XML 데이터를 보내려면 Nusoap을 사용하여 웹 서비스를 개발하고 있는데 이번에는 'ó'와 같은 라틴 문자로 데이터를 보내야합니다. 그러나 비누 클라이언트에 넣으면 작동이 멈 춥니 다. 아래는 라틴 문자로 xml을 보내는 테스트를 위해 개발 된 코드의 요약입니다. PHP Nusoap이 라틴 문자로 실패합니다

는 서버 코드의 THS 요약이 개발되고있다 :

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

이 클라이언트 코드의 THS 요약 한 것입니다

$xml .= "<STRAS>rua itororó</STRAS>"; 

특수 문자가

<?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>[email protected]</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 = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>"; 

내가 SimpleXML을 파서로 XML을 구문 분석했을 때,하지만 비누 작동하지 않았다

나는 XML에 인코딩을 설정하기 위해 노력했다.

header("Content-type:text/html; charset=UTF-8"); 

나 :

는이 같은 UTF8 또는 ISO-8859-1의 페이지의 헤더를 설정하려고 나는를 htmlentities를 사용하려고

header ('Content-type: text/html; charset=ISO-8859-1'); 

만 '의 실체 ó '는'& oacute; '입니다. 특수 문자 '&'이 있고 동일한 문제가 발생합니다.

함수를 직렬화해도 문제가 해결되지 않습니다.

Google에서 지금까지 답변을 찾을 수 없습니다.

nusoap을 사용하여 라틴 특수 문자를 전달할 수 있습니까? 방법이 있어야합니다.

+0

보인다. CDATA를 사용하면 '&'를 이스케이프 처리 할 수 ​​있으므로 다음과 같이 문자열에 htmlentities를 사용할 수 있습니다 :'$ xml. = " "; '. 나는 그것을 테스트하고 있는데, 항상 작동한다면 나는 그것을 대답으로 사용할 것이다. – giancarloap

답변

0

나는 길을 찾은 것 같습니다. 나는 '&'를 탈출 할 수 있습니다, 그래서 다음과 같이 문자열에를 htmlentities를 사용할 수 CDATA를 사용 : 나는 방법을 발견처럼

$xml .= "<STRAS><![CDATA[".htmlentities("Rua Itororó")."]]></STRAS>";