Foros del Web » Programando para Internet » PHP »

PROBLEMA CON DOMXML y Ñ

Estas en el tema de PROBLEMA CON DOMXML y Ñ en el foro de PHP en Foros del Web. Saludos a todos !!! Tengo una aplicación que lee un XML y al procesarlo con las funciones DOMXML el carácter ñ no lo reconoce e ...
  #1 (permalink)  
Antiguo 14/04/2005, 05:59
 
Fecha de Ingreso: abril-2005
Mensajes: 6
Antigüedad: 19 años
Puntos: 0
Exclamación PROBLEMA CON DOMXML y Ñ

Saludos a todos !!!

Tengo una aplicación que lee un XML y al procesarlo con las funciones DOMXML el carácter ñ no lo reconoce e introduce caractéres extraños. ¿Alguna idea? Utilizo la función get_content() para mostrar la info, pero no hay forma ...

Este es el XML para que lo intentéis probar:

<?xml version="1.0" encoding="ISO-8859-2" ?>
<bd>
<tabla nombre="CLIENTES">
<fila nombre="id">1</fila>
<fila nombre="nombre">CELESA</fila>
<fila nombre="cif">xxx</fila>
<fila nombre="razonsocial">CENTRO DE EXPORTACION DE LIBROS ESPAŃOLES</fila>
</tabla>
</bd>
  #2 (permalink)  
Antiguo 18/04/2005, 03:51
 
Fecha de Ingreso: abril-2005
Mensajes: 6
Antigüedad: 19 años
Puntos: 0
Me respondo para aquellos que tengan un problema similar:

El problema consiste en que la librería DOMXML emplea la codificación UTF-8, de tal forma que al usar USO-8859-2, las vocales acentuadas y nuestra querida Ñ no se obtiene de forma correcta.

Para resolverlo he usado el tipo de datos CDATA para que no analice la cadena que contiene la Ñ y el contenido de esta etiqueta se codifica con la función utf8_encode(). Para recibir de nuevo la información, se emplea utf8_decode() para decodificar los caractéres "raros" y funciona.

En resumen:

$nodo->set_attribute('nombre',"$dato");
$cdata = $xml->create_cdata_section(utf8_encode("$valor"));
$nodo->append_child($cdata);

esto crea el xml (usar $xml->dump_mem(true,"UTF-8") para que lo devuelva con la codificación UTF-8). Para recoger el valor, usaríamos utf8_decode($valor) y listo, con todas las Ñ y acentos que te dé la gana.
  #3 (permalink)  
Antiguo 07/11/2006, 13:53
Avatar de chechun  
Fecha de Ingreso: diciembre-2001
Ubicación: Córdoba - Capital - Alber
Mensajes: 348
Antigüedad: 22 años, 3 meses
Puntos: 0
Bueno, yo le pondria:
Cita:
$contenido=ereg_replace("ñ","ni",$contenido);
aunque no puedo usar el DOMXML ya que no se que libreria debo instalar :(
__________________
My Personal Site
Mundial 2010
  #4 (permalink)  
Antiguo 07/11/2006, 14:33
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Cita:
Iniciado por chechun Ver Mensaje
Bueno, yo le pondria:
Código PHP:
$contenido=ereg_replace("ñ","ni",$contenido); 
aunque no puedo usar el DOMXML ya que no se que libreria debo instalar :(
No tengo mucho tiempo, pero esto amerita una corrección. No debes hacer eso nunca (NUNCA), si vos modificas la ñ por ni cuando hagas la vuelta atrás debes reemplazar todos los ni por ñ para mostrar la información, pero que pasa si encontras una palabra con ni que no era una ñ antes de la conversión?

Me explico con un ejemplo (soy mas practico haciendo eso):
Código PHP:
$texto "Este texto tiene una eñe (aqui -> ñ) y ni se le ocurra cambiarla";

$texto=ereg_replace("ñ","ni",$texto); 
Código:
En este punto la variable $texto contiene:
Este texto tiene una enie (aqui -> ni) y ni se le ocurra cambiarla
Código PHP:
//Ahora para mostrar la información hacemos 
$texto=ereg_replace("ni","ñ",$texto); 
Código:
Y si imprimimos el contenido de la variable tenemos:
Este texto tiene una eñe (aqui -> ñ) y ñ se le ocurra cambiarla
Conclusión: Si hacemos eso el sistema es propenso a arruinar información!

Saludos.
  #5 (permalink)  
Antiguo 08/11/2006, 14:24
Avatar de chechun  
Fecha de Ingreso: diciembre-2001
Ubicación: Córdoba - Capital - Alber
Mensajes: 348
Antigüedad: 22 años, 3 meses
Puntos: 0
La verdad no era la intencion volver a remplazar dicha intomacion, sino que directamente para que no quede una simbologia... directamente que la informacion quede directamente con ni
niño------> ninio
moño-----> monio
etc... antes que quede una simbologia... o sino
niño---->nino
moño--->mono
__________________
My Personal Site
Mundial 2010
  #6 (permalink)  
Antiguo 08/11/2006, 14:36
Avatar de iandrade  
Fecha de Ingreso: septiembre-2006
Ubicación: Xalapa, Veracruz, MÉXICO.
Mensajes: 171
Antigüedad: 17 años, 6 meses
Puntos: 6
Puedes emplear entidades tambien

hay 3 entidades reconocidas en XML

&amp; &lt; &gt;
las cuales reemplazan a & < y > respectivamente

puedes reemplazar el caracter por su entidad HTML

&Ntilde; = Ñ

Pero como no es una Entidad XML valida puedes reemplazarla por
&amp;Ntilde; Al momento de interpretarla el navegador pondra Ñ

Esto es solo para mostrar, si deseas ponerla en un campo para modificacion tendras que hacer lo que arriba proponen
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:58.