& in XML avvia un'entità. Poiché non hai definito un'entità &WhateverIsAfterThat viene generato un errore. Dovresti eseguire l'escape con & .
$string = str_replace('&', '&', $string);
Come faccio a sfuggire alle e commerciali in XML
Per sfuggire agli altri caratteri riservati:
function xmlEscape($string) {
return str_replace(array('&', '<', '>', '\'', '"'), array('&', '<', '>', ''', '"'), $string);
}