[XML] No se imprimen acentos despues de consultar a la BDD !

Iniciado por Diabliyo, 29 Enero 2014, 04:18 AM

0 Miembros y 1 Visitante están viendo este tema.

Diabliyo

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 (php) [Seleccionar]
<?php
session_start
();
header ('Content-type: text/html; charset=utf-8');

echo 
'
[<a href="test.php">Inicio</a>]<br>
<form action="test.php?id=crear" method="POST">
<input type="text" name="texto" value=""> <input type="submit" value="Agregar">
</form>'
;

# agregar pendiente
if( !strcmp($_GET["id"], "crear") && $_POST["texto"] )
{
$pend$_POST["texto"];

echo 'Haciendo XML';
$file'test.xml';
$xml= new DOMdocument"1.0""UTF-8" );
$root $xml->createElement("Pendientes");
$xml->appendChild($root);
$p$xml->createElement("evento"$pend );
$root->appendChild($p);
$xml->formatOutput true;
$xml->save($file);
echo '<br>Generado...';
unset($xml$root$pend$p$file);
}
?>


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 !

#!drvy

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


Diabliyo

#2
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 (php) [Seleccionar]
<?php
$link
conectar_mysql();
$consmysql_query"select * from pendientes;"$link );
if( 
mysql_num_rows($cons) )
          {
          
$bufmysql_fetch_array($cons);
          
$bufnuevoutf8_decode(html_entity_decode$buf["text"], ENT_QUOTES ));
          
# ahora si armo el XML y pongo el valor
          # se colocara en UTF-8 con acento y todo bien
          
}
?>


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

raul338

Código (php) [Seleccionar]
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)