一些& # 39;& lt; & # 39;标记显示为HTML '<'实体


Some '<' tags within a PHP SOAP response displaying as HTML '&lt;' entities

我正在使用PHP SOAP从Web服务获得一些数据。我使用__getLastResponse从Soap客户机接收到的数据似乎是围绕相关XML数据的Soap信封,这很好,因为我随后计划将其转换为SimpleXMLElement以提取数据。

问题是,数据看起来是正确的,直到它碰到一个特定的<records>标签,之后它用&lt;替换所有的<标签。

这是什么数据看起来像当我print_r它(这只是一个小的例子,完整的数据):

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:searchResponse xmlns:ns2="http://woksearch.v3.wokmws.thomsonreuters.com"><return><queryId>1</queryId><recordsFound>16492</recordsFound><recordsSearched>38802522</recordsSearched><records>&lt;records xmlns="http://scientific.thomsonreuters.com/schema/wok5.4/public/FullRecord">
&lt;REC r_id_disclaimer="ResearcherID data provided by Thomson Reuters">&lt;UID>WOS:000257367300002&lt;/UID>&lt;static_data>&lt;summary>&lt;EWUID>&lt;WUID coll_id="WOS">&lt;/WUID>&lt;edition value="WOS.SCI">&lt;/edition>&lt;/EWUID>&lt;pub_info issue="8" pubtype="Journal" sortdate="2008-07-01" has_abstract="Y" coverdate="JUL 2008" pubmonth="JUL" vol="17" pubyear="2008">&lt;page end="1820" page_count="16" begin="1805">1805-1820&lt;/page>&lt;/pub_info>&lt;titles count="6"&gt;&lt;title type="source">BIODIVERSITY AND CONSERVATION&lt;/title>...etc...&lt;/static_data>&lt;dynamic_data>&lt;citation_related>&lt;tc_list>&lt;silo_tc local_count="16" coll_id="WOS">&lt;/silo_tc>&lt;/tc_list>&lt;/citation_related>&lt;cluster_related>&lt;identifiers>&lt;identifier value="0960-3115" type="issn">&lt;/identifier>&lt;identifier value="10.1007/s10531-007-9267-2" type="doi">&lt;/identifier>&lt;identifier value="10.1007/s10531-007-9267-2" type="xref_doi">&lt;/identifier>&lt;/identifiers>&lt;/cluster_related>&lt;/dynamic_data>&lt;/REC>
&lt;/records></records></return></ns2:searchResponse></soap:Body></soap:Envelope>

为什么开始标签显示正确,直到它得到第二个<records>标签?之后,它将它们替换为&lt;,直到到达结束的</records>标记,当它继续正确显示开始标记时。它不影响结束标签或引号,这很奇怪。

这是否与CDATA有关?这就是我所能想到的,尽管它没有说明在任何地方都有一个CDATA块…

谢谢。

我也有同样的问题,不知道这是不是一个"好的"解决方案,但至少它是有效的:

$xmlP = html_entity_decode($client->__getLastResponse());

这是将html实体解码回html。& lt;和>正确地存在于字符串中,保持不变。

希望对大家有所帮助