2011-12-05 7 views
14

Tengo una aplicación que (como muchas otras) recibe entradas del usuario, las almacena en una base de datos y luego las procesa utilizando (entre otras cosas) herramientas XML. La aplicación toma entrada de texto libre y como muchos otros desarrolladores soy muy cuidadoso con escapes y citas para que pueda manejar entradas que contienen diferentes tipos de espacios en blanco, caracteres de comillas, caracteres XML reservados, etc.Práctica recomendada para manejar pestañas verticales y otros caracteres xml no válidos

Sin embargo, de vez en cuando un usuario administrará para ingresar una cadena que contiene un carácter de tabulación vertical (hex 0B) o una alimentación de formulario (hex 0C). esto no puede ser procesado por herramientas XML en absoluto y hace que la aplicación se desinfle.

En mi aplicación es muy importante preservar la entrada original durante el proceso de "ida y vuelta", así que no me gusta quitar los caracteres que no me gustan, especialmente cosas como el feed de formularios que todavía se usan ocasionalmente en archivos de texto sin formato.

¿Existe alguna mejor práctica o estrategia general para manejar estos caracteres cuando se trata de procesamiento XML?

Respuesta

-3

Deberías escapar de ellos usando amperstand (� hasta &#0x1F), luego decodificarlos/restaurarlos al final.

Ver XmlTextWriter incorrectly writing control characters

+0

-1: esto no tiene sentido. XML no válido simplemente no es XML. –

+0

Entonces la pregunta no tiene sentido. Si el requisito es poner caracteres especiales no válidos en el XML (qué tan inválido puede ser), el escapado permitirá que el archivo se procese mientras que el caso límite de uso de caracteres no válidos debe ser manejado por la propia aplicación. También podría usar CDATA o cualquier otro formato. – Vincent

+3

De hecho, la pregunta no tiene sentido. Es otro caso en el que se le pide al desarrollador que recupere el hecho de que las personas que envían los datos no entienden XML. –

3

Sí, por desgracia, algunos personajes son ilegales en XML, y no tienen entidad equivalente. Como uno de esos ejemplos, vea:

http://www.jdom.org/docs/apidocs.1.1/org/jdom/Element.html#setText(java.lang.String) 

que es un String setter ... que puede lanzar una excepción! La pestaña vertical es exactamente uno de esos caracteres para los que no hay entidad XML, ni una forma de "escaparse" con XML solo.

Estoy trabajando en esto mismo utilizando la codificación base64 para desinfectar las cadenas que pueden albergar esos caracteres. Es un poco tonto, ya que tengo que codificar y decodificar en base64 todo el tiempo, pero no creo que haya una buena alternativa.

Cuestiones relacionadas