Eliminar & amp de la cadena al escribir en xml en PHP

Estoy intentando escribir en un archivo XML usando DOMDocument un enlace que contiene el signo &. Cuando bash esto, el enlace se convierte en & en el xml. Entonces, de product=1&qty;=1 convierte en product=1&qty;=1 .

¿Puedes por favor decirme una forma de evitar esto?

Ampersands se deben codificar de esta manera. Cambiarlo sería incorrecto.

Ver http://www.w3.org/TR/xml/

El carácter ampersand (&) y el paréntesis angular izquierdo (<) NO DEBEN aparecer en su forma literal, excepto cuando se utilizan como delimitadores de marcado, o dentro de un comentario, una instrucción de procesamiento o una sección CDATA. Si se necesitan en otro lugar, DEBEN escaparse usando referencias de caracteres numéricos o las cadenas & y < respectivamente.

y http://www.w3.org/TR/xhtml1/#C_12

Tanto en SGML como en XML, el carácter y comercial (“&”) declara el comienzo de una referencia de entidad (por ejemplo, ® para el símbolo de marca registrada “®”). Desafortunadamente, muchos agentes de usuarios de HTML han ignorado silenciosamente el uso incorrecto del carácter ampersand en los documentos HTML, tratando los signos y símbolos que no se parecen a las referencias de las entidades como signos de unión literales. Los agentes de usuario basados ​​en XML no tolerarán este uso incorrecto, y cualquier documento que utilice un ampersand incorrectamente no será “válido” y, por lo tanto, no se ajustará a esta especificación. Para garantizar que los documentos sean compatibles con agentes de usuario HTML históricos y agentes de usuario basados ​​en XML, los signos y símbolos usados ​​en un documento que deben tratarse como caracteres literales deben expressse como una referencia de entidad (por ejemplo, ” & “). Por ejemplo, cuando el atributo href del elemento a se refiere a un script CGI que toma parámetros, debe expressse como http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user en lugar de como http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user

Como dijo Gordon, los URI están codificados de esta manera. Si no codificó el & , el archivo XML se arruinaría, obtendría errores al analizarlo. Cuando retire la cadena del archivo XML, si todavía aparece el &amp str_replace() ya sea str_replace() como este:

$str = str_replace('&', '&', $str)

O use htmlspecialchars_decode() :

$str = htmlspecialchars_decode($str);

La ventaja añadida de usar htmlspecialchars_decode() es que decodificará cualquier otro HTML que pueda estar en la cadena. Para más, mira aquí .