2009-08-28 3 views
1

this question과 관련된 문제가 있습니다. 일부 이름을 반환하는 웹 서비스 (또한 PHP 사용) 있습니다. 스웨덴 문자 (å, ä 또는 ö)와 다른 문자가 포함되어있을 때 soapfault (XML 문서가없는 것처럼 보입니다)가 나타납니다. 그러나 나는 $ soapcalo -> __ getLastResponse()를 사용하여 완전한 afaik 응답을 볼 수있다.PHP 비누 클라이언트의 특수 문자 문제

특수 문자는 어떻게 처리합니까? 나는 클라이언트와 서버 모두에서 인코딩 속성 (utf-8)을 추가하려했지만 성공하지는 못했습니다.

편집 : 비누 응답의 발췌 :

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="..."> 
<SOAP-ENV:Body> 
    <ns1:callFunctionResponse> 
    <ns1:Response> 
    <ns1:result>success</ns1:result> 
    <ns1:content> 
    <Contact> 
     <userName>VIB09SLA9EP</userName> 
     <firstName>Patrik</firstName> 
     <lastName>Stenstr&ouml;m</lastName> 
    </Contact> 
    </ns1:content> 
    </ns1:Response> 
    </ns1:callFunctionResponse> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

감사합니다!

+0

SOAP 응답의 첫 번째 줄을 알려 주실 수 있습니까?SOAP이 XML이기 때문에, 서버에 UTF-8을 적절히 추가하면 응답 XML이 UTF-8임을 알려야합니다. XML이 ISO-8859-1로 cliaming되었지만 실제로 UTF-8이 포함 된 경우 문제가 발생합니다. – MSalters

답변

3

모두들 - 문제가 마침내 해결되었으므로 나는 similair 문제가있는 다른 누군가를 위해 여기에 게시 할 것이라고 생각했습니다. 결과적으로 문제는 프로세스 초기에 발생했습니다.

DomDocument를 사용하여 구조를 작성하여 SOAP 응답 내용을 생성했습니다. 나중에 saveHTML 함수로 저장되었습니다. 이 함수는 클라이언트에서 비누 디코딩을 중단시키는 HTML 인코딩을 추가합니다.

대신 saveXML 함수를 사용하면 답장이 성공적으로 처리되고 (태그 및 기타 이상한 물건을 추가 할 때도) 비누 클라이언트가 올바른 문자열로 디코딩합니다.

나는이 그것의 끝에 희망,하지만 당신은 : 모든 도움과 적절한 장소 확인에 도움이되는 사람에 한에 대한

감사를 몰랐어.

/빅터

+0

안녕하세요, 저는이 문제를 어떻게 해결했는지 명확하지 않습니다. Coz 나는 정확한 문제에 직면 해있다. 제발 좀 자세한 코드를 게시 할 수 있습니까? –

+0

저에게 saveHTML은 비누 인코딩을 해독 한 추가 인코딩을 추가했습니다. saveXML로 바꿨을 때 제대로 처리 될 수있는 "원본"인코딩이있었습니다. 또한 다른 답장을 확인하십시오, 귀하의 경우에 도움이 될 수 있습니다. – Victor

2

이것이 도움이 될지 모르지만 HTML entities을 조사하면 확실하지 않습니까?

+0

감사. 나는 각각 å, ä 및 ö를 å ä 및 ö으로 인코딩 할 수 있다고 가정하고 있지만 실제로는 필요하지 않습니다. – Victor

+0

위에서 편집 : å 등으로 밝혀 짐에 따라 인코딩이 실제로 처음부터 어떻게 해독 되었습니까? soaping 할 때 그것을하지 말라! :) – Victor

4

실제로 추측 : 이름이 실제로 utf-8로 인코딩되었는지 확인 했습니까? 나는 SOAP 속성을 설정하는 것만으로 실제 값의 인코딩을 변경하지 않을 것이라고 생각한다. SOAP을 통해 반환하기 전에 이름에 utf8_encode을 사용해 보셨습니까?

+0

나는 지금있다 :) 불행히도 그것은 어떤 차이도 만들지 않으며 또한 서버 측 로깅 (기본 텍스트 파일)이 utf-8로 나오기 때문에 모든 것이 괜찮아 보인다. 고마워 – Victor

0

SOAP 서버는 Windows 기반 서버입니까? 나는 Windows 기반 서버 또는 응용 프로그램이 UTF-8을 보내지 않고 대신 cp1252을 전송한다는 사실을 알고 있습니다.

나는 특수 문자가 인코딩으로 내려오고 있었다 하나의 응용 프로그램에서, 난 그냥 내 HTML 출력에 다음 코드를 실행합니다 :

<?php 
print htmlentities($string, ENT_COMPAT, 'cp1252'); 

특수 문자가 HTML 출력을위한 인코딩 된 보장하기 위해.

+0

정말 여기에 따라 가지 말아라 ... 문제는 난 단지 __getLastResponse() 통해 반환 된 실제 데이터에 액세스 할 수 있습니다 - 일반적으로 그냥 SOAP 오류를 가져 오는 액세스. 그러나 질문에 대답하려면 - 예, 비누 서버는 Windows 컴퓨터에서 실행됩니다. – Victor

1

내 문제가 파이프 내려 오는 특별한 문자 UTF을-8 인코딩 된 'SoapClient가 제대로 UTF8 데이터를 디코딩하지 않습니다'인터넷 검색을하는 동안 나는 첫 번째 결과로이 질문에 충돌하기 때문에 php SoapClient가 제대로 디코딩하지 못했습니다.

내 수업이 UTF-8 인 PHP 파일의 인코딩을 변경하여 수정되었습니다.