2012-06-14 16 views
5

¿Cuál es la mejor práctica para generar XML válido con PHP a partir del texto enviado por el usuario, p. Datos de ventas de eCommerce con ampersands, corchetes angulares, caracteres no acentuados, nuevas líneas, etc.Haga que la entrada del usuario sea segura para XML

¿En qué funciones, bibliotecas y expresiones regulares confía la gente?

+0

Actualmente estoy usando CDATA y htmlentities, y después de un acento o una en León provocado un descarrilamiento estoy quitando caracteres acentuados con strtr(). La gente de la oficina de la empresa odia la salida de htmlentities() y su codificador de Windows parece que no puede decodificar para ellos. – jerrygarciuh

+0

Parece más que está mezclando codificaciones de conjunto de caracteres que tener un problema con el CDATA. Usar htmlentities y CDATA juntos no tiene mucho sentido BTW. Entonces, en lugar de estar loco y de adivinar ampliamente para matar algo, primero averigüe dónde radica el problema. La solución entonces a menudo es trivial. Entonces, ¿qué es exactamente lo que no funciona? – hakre

+0

Bueno, lo que tenemos es algunos cabeza hueca que usaron el almacenamiento abstracto de Expression Engine para hacer una tienda de comercio electrónico. Las codificaciones de tabla se configuran para que coincidan con EE. La oficina administrativa del propietario de la tienda es Windows y hay un ejecutable de otra parte que acepta XML e importa en Great Plains en el cuadro de Windows. Me encargaron escribir la API que acepta llamadas del ejecutable para sincronizar distribuidores, productos de la tienda y pedidos de distribuidores y minoristas. No quería envolver cada parte de la entrada del usuario en etiquetas CDATA, pero incluso cuando lo hice, encontré el tema acentuado o voraz. – jerrygarciuh

Respuesta

4

información Wrap en CDATA etiquetas y codificar datos con htmlentities()

'<tag><![CDATA[' . htmlentities($theData) . ']]></tag>' 

O usando DOM

$dom = new DOMDocument("1.0", "utf-8"); 

/* ... */ 

$dom->createCDATASection(htmlentities($theData)); 
+0

Lo siento, pero la respuesta parece un poco como que no tienes ni idea de para qué es CDATA y qué tiene que ver o qué hacer con htmmlentities. – hakre

1

Si desea seguridad binaria, entonces necesita usar una codificación de transporte adicional. Por ejemplo, puede usar base64 o uuencode para almacenar los datos de forma binaria segura dentro de un fragmento de XML.

Cuestiones relacionadas