2011-01-24 14 views
5

¿Por qué XML muestra un error en ciertos caracteres especiales y algunos están bien?Error de análisis XML: entidad indefinida: caracteres especiales

Por ejemplo, a continuación va a crear el error,

<?xml version="1.0" standalone="yes"?> 
<Customers> 
    <Customer> 
     <Name>L&ouml;ic</Name> 
    </Customer> 
</Customers> 

pero esto está bien,

<?xml version="1.0" standalone="yes"?> 
<Customers> 
    <Customer> 
     <Name>&amp;</Name> 
    </Customer> 
</Customers> 

convierto el carácter especial a través de php - htmlentities('Löic',ENT_QUOTES) por cierto.

¿Cómo puedo evitar esto?

Gracias.

EDIT:

he encontrado que funciona bien si uso de caracteres numéricos tales como L&#243;ic

ahora tienen que encontrar la manera de usar PHP para convertir caracteres especiales en caracteres numéricos!

Respuesta

17

Hay cinco entidades definidas en la especificación XML - &amp;, &lt;, &gt;, &apos; y &quot;

Hay lots of entities defined in the HTML DTD.

No se pueden usar los de HTML en XML genérico.

Usted podría utilizar referencias numéricas, pero que probablemente sería mejor simplemente conseguir su character encodings recta (que básicamente se reduce a:

  • Set your editor para guardar los datos en UTF-8
  • Si procesa los datos con un lenguaje de programación, asegúrese de que sea compatible con UTF-8
  • Si almacena los datos en una base de datos, asegúrese de que estén configurados para UTF-8
  • Cuando saque su documento, asegúrese de que el HTTP los encabezados especifican que es UTF-8 (en el caso de XML, UTF-8 es el valor predeterminado, por lo que no se especifica nada es casi tan bueno)

)

+0

Dorward: Gracias. Intenté con este iconv ('UTF-8', 'ISO-8859-1 // TRANSLIT', 'Löic'), luego me da este error - Aviso: iconv() [function.iconv]: detecté un multibyte incompleto carácter en cadena de entrada en ... – laukok

+1

+1, pero todavía necesita utilizar entidades numéricas para los caracteres que están prohibidos en XML (por ejemplo, U + 0003). – Artefacto

+0

Sí, UTF-8 no ayudará si está intentando enviar   o ö en XML. – mikato

3

porque no es una entidad integrada, es en su lugar, una entidad externa que necesita una declaración en DTD.

Cuestiones relacionadas