Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Diabliyo en 29 Enero 2014, 04:18 am



Título: [XML] No se imprimen acentos despues de consultar a la BDD !
Publicado por: Diabliyo en 29 Enero 2014, 04:18 am
Buenas.

Tengo un programa que guarda eventos de un formulario en una BDD MySQL, que despues genero con los datos del MySQL un XML de la lista de dichos eventos.

El detalle es que cuando consulto a la BDD, las palabras que van acentuadas salen con un caracter raro.

Hice un codigo de prueba ya que es muy complicado estar modificando el code, esto mas que nada para empezar a "deducir" por donde puede estar mi problema.

En mi ejemplo que les pondre aqui, al tomar el dato del INPUT (pongo palabra acentuada), genero un XML con un solo evento y podemos notar que SI sale la palabra acentuada.

Entonces ???[... pues en el ejemplo funciona, pero ya en "produccion" al consultar los datos de MySQL no se pueden imprimir los acentos en el XML :'(

Código
  1. <?php
  2. header ('Content-type: text/html; charset=utf-8');
  3.  
  4. echo '
  5. [<a href="test.php">Inicio</a>]<br>
  6. <form action="test.php?id=crear" method="POST">
  7. <input type="text" name="texto" value=""> <input type="submit" value="Agregar">
  8. </form>';
  9.  
  10. # agregar pendiente
  11. if( !strcmp($_GET["id"], "crear") && $_POST["texto"] )
  12. {
  13. $pend= $_POST["texto"];
  14.  
  15. echo 'Haciendo XML';
  16. $file= 'test.xml';
  17. $xml= new DOMdocument( "1.0", "UTF-8" );
  18. $root = $xml->createElement("Pendientes");
  19. $xml->appendChild($root);
  20. $p= $xml->createElement("evento", $pend );
  21. $root->appendChild($p);
  22. $xml->formatOutput = true;
  23. $xml->save($file);
  24. echo '<br>Generado...';
  25. unset($xml, $root, $pend, $p, $file);
  26. }
  27. ?>

Que podra ser que pierde el formato UTF-8 cuando lo paso a la BDD MySQL :S...

Ahora.... Digamos que consulto los datos de la BDD MySQL, pero para mostrarlos en pantalla, y SI se imprime el acento. El problema es al generar el XML.

Saludos !


Título: Re: [XML] No se imprimen acentos despues de consultar a la BDD !
Publicado por: #!drvy en 29 Enero 2014, 04:37 am
Has probado utf8_encode / utf8_decode ? Lo único que se me ocurre es que la DB no guarde del todo bien dichos caracteres (charset != utf8-*)..

Saludos

 


Título: Re: [XML] No se imprimen acentos despues de consultar a la BDD !
Publicado por: Diabliyo en 29 Enero 2014, 15:32 pm
Efectivamente mi estimado, hice el mismo codigo de ejemplo pero guardando el "evento" en mysql, despues consultando y armando el XML y no sale acentuado !

Creo que MySQL no me lo guarda en utf-8.... pero verifique la columna Collation y dice "utf8_general_ci".

Lo que tuve que hacer para solucionarlo es una conversion que no me satisfase mucho, pero ni modo :(...

Código
  1. <?php
  2. $link= conectar_mysql();
  3. $cons= mysql_query( "select * from pendientes;", $link );
  4. if( mysql_num_rows($cons) )
  5.          {
  6.          $buf= mysql_fetch_array($cons);
  7.          $bufnuevo= utf8_decode(html_entity_decode( $buf["text"], ENT_QUOTES ));
  8.          # ahora si armo el XML y pongo el valor
  9.          # se colocara en UTF-8 con acento y todo bien
  10.          }
  11. ?>

Si alguien tiene una idea de como solucionar que MySQL guarde en UTF-8 se lo agradeceria :D


Título: Re: [XML] No se imprimen acentos despues de consultar a la BDD !
Publicado por: raul338 en 29 Enero 2014, 15:42 pm
Código
  1. mysql_query("SET NAMES utf8");
y santo remedio :P

eso pasa cuando el servidor mysql no esta configurado para que acepte conexiones utf-8 por defecto (conection_collation y similares)