Buenas
Aún y así el replace no le va a solucionar el tema de los & en las url.
Yo lo que hago es meter esos valores entre
<![CDATA[ y
]]> para que xml no lo parsée y tire un error.
Código PHP:
'<link><![CDATA['.$url.']]></link>'
Y lo mismo para resto de contenidos que puedan contener caracteres reservados
Código PHP:
'<title><![CDATA['.$titulo.']]></title>
<description><![CDATA['.$descripcion.']]></description>';
Un saludo