2016-07-30 3 views
1

PHP CURL을 사용하여 API 호출을 특정 URL로 만들고 있습니다. 브라우저에서 응답을받을 수 있습니다.API 호출에서받은 UTF-16 XML을 구문 분석하는 방법

CURL이 같은 변수에이 응답을 저장 :

$output = curl_exec($ch); 

를 지금은 내 브라우저에서이 응답을 얻을

print_r(htmlspecialchars($output, true)); 

를 사용하는 경우.

<?xml version="1.0" encoding="utf-16" standalone="no"?> 
<loginres> 
<sessiontoken>123456</sessiontoken> 
<timeout>7/30/2016 11:18:22 AM</timeout> 
<status>1</status> 
</loginres> 

이것은 UTF-16으로 인코딩 된 응답이므로 SimpleXML 또는 DOM 문서를 사용할 수 없습니다. 이것을 시도해 볼 수 있습니다 (나는 여러 번 실패했습니다). 아무 것도 오지 않는다.

또한, 나는 배열 필터 기능을 사용하여 "폭발"로, 시도 및 응답은 다음과 같습니다

Array 
(
[0] => version="1.0" 
[2] => encoding="utf-16" 
[3] => standalone="no"?> 


[5] => 123456 

[7] => 7/30/2016 
[8] => 11:26:09 
[9] => AM 

[11] => 1 

) 

지금, 내 질문은,이 파일을 사용하여 어떻게 .... XML 태그에서 PHP 변수를 생성하고 구문 분석하여 데이터베이스에서 조작하고 저장하려고했습니다.

다른 옵션은 내 로컬 서버의 xml 파일에 응답을 저장하고 Jquery, Ajax를 사용하여 응답을 저장하는 것입니다. 그러나 어떻게 해야할지 모르겠습니다. 도와주세요.

답변

0

올바르게 정의 된 DOM은 UTF-16을 올바르게로드합니다. API는 여전히 UTF-8을 반환합니다.

// create some xml string and convert it to utf-16 
$xml = iconv('utf-8', 'utf-16', '<?xml version="1.0" encoding="utf-16"?><foo>Ä</foo>'); 

// look an encoded special char and a BOM 
var_dump($xml); 

$document = new DOMDocument(); 
$document->loadXml($xml); 

// loaded just fine, here is the node content as UTF-8 
var_dump($document->documentElement->textContent); 

출력 https://eval.in/614245는 :

string(104) "��<?xml version="1.0" encoding="utf-16"?><foo>�</foo>" 
string(2) "Ä" 
+0

내 질문의 목적은 PHP에서 API 반응에 의해 생성 된 UTF-16 XML을 사용하는 방법에 대한 도움을 요청하는 것이 었습니다. XML 태그에서 변수를 만들고 조작하고 싶었습니다. API 서버를 제어 할 수 없으므로 DOM 자체에서이를 변환하는 것은 어려울 것입니다. –

+0

차이점은 없습니다. file_get_contents()를 사용하여 가져 와서 DOM에로드하십시오. 깨지지 않으면 DOM이로드합니다. – ThW