sto sperimentando il seguente comportamento:PHP, SimpleXML, decodifica le entità in CDATA
$xml_string1 = "<person><name><![CDATA[ Someone's Name ]]></name></person>";
$xml_string2 = "<person><name> Someone's Name </name></person>";
$person = new SimpleXMLElement($xml_string1);
print (string) $person->name; # Someone's Name
$person = new SimpleXMLElement($xml_string2);
print (string) $person->name; # Someone's Name
$person = new SimpleXMLElement($xml_string1, LIBXML_NOCDATA);
print (string) $person->name; # Someone's Name
I documenti PHP dicono che NOCDATA "Merge [s] CDATA come nodi di testo". Per me questo significa che CDATA verrà trattato allo stesso modo dei nodi di testo o che il comportamento del terzo esempio sarà uguale al secondo esempio.
Non ho il controllo sull'XML (è un feed da una fonte esterna), altrimenti rimuoverò semplicemente il tag CDATA poiché non fa nulla e rovina il comportamento che voglio.
Perché l'esempio sopra riportato si comporta come fa? C'è un modo per rendere SimpleXML gestire i nodi CDATA nello stesso modo in cui gestisce i nodi di testo? Che cosa fa realmente "Unisci CDATA come nodi di testo", dal momento che non riesco a capire questa opzione?
Attualmente sto decodificando dopo aver estratto i dati, ma l'esempio precedente non ha ancora senso per me.
'print' ha contesto stringa, è non è necessario eseguire il cast in questo caso. – hakre
@hakre ma 'print' (più comunemente scritto 'echo') è probabile che venga usato come standard mentre il debug viene sostituito con qualcos'altro, quindi direi che è una buona abitudine fare costantemente il casting per evitare la successiva confusione. – IMSoP