2011-01-11 6 views
0

XML 코드를 반환하는 API를 작성하고 있습니다. 예를 들어, API는 반환합니다앰퍼샌드 (&)로 utf8_decode 오류가 발생했습니다.

<message>hello, this is a message &amp; it used htmlsepcialchars</message> 

내가 file_get_contents()를 사용하고 배열로 반환 된 정보를로드 할() simplexml_load_string하고있다.

그런 다음 utf8_decode()를 사용하여 메시지를 수신 웹 사이트의 친숙한 문자셋으로 변환했습니다. 그러나, 나는 메시지의 앰퍼샌드 (&)에 다음과 같은 메시지가 핀 포인트가 나타납니다

Warning: main() [function.main]: unterminated entity reference 

인해 앰퍼샌드로, 메시지의 나머지 부분은 잘립니다. 어떤 아이디어이 문제를 해결하는 방법?

+1

아마도 'simplexml_load_string()'은'& '을 단지 앰퍼샌드로 렌더링합니까? 아마도 그것을 다시 인코딩하는 것이 도움이 될 것입니다. ('htmlentities()'가 도움이 될 것입니다.) – Amber

+0

빠른 주석 :'file_get_contents()'는 필요하지 않습니다.'simplexml_load_file ('/ path/to/file');을 사용하십시오. - 또한 링크를 제공하십시오 해당 오류를 생성하는 파일. –

답변

0

내 대답은 사용자 오류입니다. 나는 기본적으로 내 코드의 어딘가에서 다시 탈출했다.

0

앰퍼샌드가 인코딩되지 않았으므로 이중 디코딩하거나 CDATA 필드에 넣으십시오.

일반적으로 특수 문자는 CDATA 필드에 입력해야합니다. 인코딩해야하는 번거 로움을 덜어줍니다. PHP DOM 생성 함수는 필요한 것을 가지고 있습니다.


$doc->createCDATASection 

물론

:

http://www.w3schools.com/Xml/xml_cdata.asp

http://fr.php.net/manual/en/function.domdocument-create-cdata-section.php

+0

특수 문자를 "인코딩"(또는 이스케이프, 오히려)하는 것이 아니라 * 실제로 시나리오가 없습니다. 맹목적으로''사이에 텍스트를 넣지 않고 XML에 무효가되는 내용이 텍스트에 포함되지 않기를 바랍니다. DOM 메소드를 사용하면 CDATA를 포함하여 입력이 자동으로 이스케이프되므로 아무런 문제가 없습니다. –

+0

그것이 내가 그에게 그 일을하는 데 어려움을 덜어 줬다고 말한 이유입니다. – cromestant

0

음, SimpleXML을 문자열 인코딩 UTF8 및 엔티티 이스케이프해야 값되어야합니다. 코드에 utf_decode()이 정말로 필요합니까?

+0

SimpleXML은 UTF-8에 국한되지 않고 파일이 유효한 한 대부분의 인코딩을로드 할 수 있습니다 (올바른 인코딩이 선언 된 한 IOW). –

관련 문제