2011-01-20 4 views
2

SOAP 웹 서비스에 XML 문서를 보내야합니다 (제어 할 권한이 없습니다). 본문은 HTML 엔티티를 포함하기 때문에 나는 오류가 발생했다, 그래서 나는 html_entity_decode()와 텍스트의 문자열을 청소하고 htmlspecialchars()을 내가 SimpleXML을 객체에 텍스트를 추가하기 전에, 다음과 같이 :PHP를 통해 XML 문서의 16 진수 엔티티를 깨끗이합니다.

if(!mb_detect_encoding($string, "UTF-8") == "UTF-8") { 
    $string = utf8_encode($string); 
} 
$string = htmlspecialchars(html_entity_decode($string, ENT_COMPAT, 'UTF-8'), ENT_COMPAT, 'UTF-8'); 
$xml->addChild('PROD_DESC', $string); 

을하지만라는 이름의 실체를 청소하지만, 형태가 ©이라면, á과 같은 16 진수 엔티티가 없으며, 내가 말하는 서비스도 그 중 하나를 받아들이지 않습니다.

In this post 가능한 해결책을 찾았지만, 그 문자열을 깔끔한 정리 문자열 함수에 전달할 때 동일한 문자열을 얻었지만 그 엔티티는 접촉하지 않습니다.

+2

[PHP의 가능한 중복 : 나는 UTF-8은 그것의 16 진수 표기를 기록 작성하려고 할 때마다있는 DOMDocument를 사용하여. ] (http://stackoverflow.com/questions/3575109/php-using-domdocument-whenever-i-try-to-write-utf-8-it-writes-the-hexadecimal-no) – Gordon

+1

예, 죄송합니다, 저는 그걸 보지 못했습니다. 당신은 거기에서 좋은 설명을했습니다. – AJJ

답변

2

숫자 실체는 SimpleXML이 추가됩니다

// with declared encoding : 
$xml = simplexml_load_string('<?xml version="1.0" encoding="utf-8"?><x></x>'); 
$xml->addChild('PROD_DESC', "à"); 
// result: <PROD_DESC>à</PROD_DESC> 

// without declared encoding : 
$xml = simplexml_load_string('<?xml version="1.0"?><x></x>'); 
$xml->addChild('PROD_DESC', "à"); 
// result: <PROD_DESC>&#xE0;</PROD_DESC> 
+0

이 작품! 감사. 한 조각 남았습니다. 해당 텍스트 필드의 모든 행 끝에 캐리지 리턴 : 을 제외한 모든 항목이 사라졌습니다. 이 엔티티가 삽입되는 이유는 무엇입니까? – AJJ

0

문자열을 base64 인코딩 된 데이터로 전달할 수 있습니까? 이렇게하면 아무 것도 뺄 필요가 없습니다. 당신의 XML 문서가 어떤 선언 인코딩이 없기 때문에