Foros del Web » Programando para Internet » PHP »

Problema con acentos mysql-php

Estas en el tema de Problema con acentos mysql-php en el foro de PHP en Foros del Web. Buenas tardes gente, Tengo un problema con los acentos guardados en base de datos que se me muestran como signos de interrogación y no se ...
  #1 (permalink)  
Antiguo 07/04/2014, 10:44
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 389
Antigüedad: 13 años, 8 meses
Puntos: 16
Problema con acentos mysql-php

Buenas tardes gente,

Tengo un problema con los acentos guardados en base de datos que se me muestran como signos de interrogación y no se ven, tengo rato con esto y la verdad no veo la salida. ya he seguido varios temas que hablan al respecto, he probado las siguientes cosas:

1. cambie el character set de los campos (los he colocado en varios distintos para probar y en todos es lo mismo).
2. la base de datos esta en utf8_spanish_ci

3. Tengo la siguiente función en php para convertir los acentos:
Código PHP:
Ver original
  1. public static function codificarHTML($cadena) {
  2.         $arrAcentos = array (
  3.                 'á' => "á",
  4.                 'é' => 'é',
  5.                 'í' => 'í',
  6.                 'ó' => 'ó',
  7.                 'ú' => 'ú',
  8.                 'Á' => "Á",
  9.                 'É' => 'É',
  10.                 'Í' => 'Í',
  11.                 'Ó' => 'Ó',
  12.                 'Ú' => 'Ú',
  13.                 'Ñ' => "Ñ",
  14.                 'ñ' => "ñ",
  15.                 '¿' => '¿'
  16.         );
  17.         $cadena = explode ( " ", $cadena );
  18.         $arrCadena = array ();
  19.        
  20.         foreach ( $cadena as $valor ) {
  21.             $band = 0;
  22.             foreach ( $arrAcentos as $key => $value ) {
  23.                
  24.                 if (strpos ( $valor, $key ) !== false) {
  25.                     $valor = str_replace ( $key, $value, $valor );
  26.                     $band = 2;
  27.                 }
  28.             } // fin foreach interno
  29.             $arrCadena [] = trim ( $valor );
  30.         } // fin foreach
  31.         $cadenaFinal = implode ( " ", $arrCadena );
  32.         return $cadenaFinal;
  33.     } // fin función

ha esa función le paso las cadenas traidas de BD y deberia convertirme los acentos a el codigo HTML correspondiente, cabe acotar que esto ME FUNCIONA perfectamente con POSTGRESQL pero al intentar usarlo en mysql no entra en el if del strpos, como si no hubiera coincidencia de acentos y el navegador me muestra un signo de interrogación.

Muchas gracias a quien pueda ayudarme y a quien se tome un tiempo para leer también, pero no se q más probar.
__________________
Lo imposible es lo posible visto por los ojos de un incapaz.
Si te sirve la respuesta. dale + al karma.
Saludos
  #2 (permalink)  
Antiguo 07/04/2014, 11:32
Avatar de TSG
TSG
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 373
Antigüedad: 11 años, 2 meses
Puntos: 9
Respuesta: Problema con acentos mysql-php

Hola muy buenas,

Prueba con tener en el archivo lo siguiente:

Código PHP:
Ver original
  1. <meta charset="UTF-8" />
  2.  
  3. $variable = utf8_decode(mysqli_real_escape_string($_POST['hola']));

Es un ejemplo del uso de:

Código PHP:
Ver original 

Prueba y coméntanos!

Un cordial saludo!
  #3 (permalink)  
Antiguo 07/04/2014, 14:35
Avatar de asus090102  
Fecha de Ingreso: mayo-2012
Ubicación: Ensenada- Buenos Aires
Mensajes: 67
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Problema con acentos mysql-php

Hola, yo lo soluciné con esto:
Código PHP:
include ("conexion.php");
mysql_query("UPDATE ejemplo SET ejemplo=".$_POST["ejemplo"].",ejemplo1='".$_POST["ejemplo1"]."'  WHERE ejemplo=".$_REQUEST["ejemplo"].";"$conexion);
mysql_query("SET NAMES 'utf8'"); //-------------------esta es la linea importante, la que te traduce al guardar.
mysql_close($conexion); 
Saludos y espero que te sirva.
  #4 (permalink)  
Antiguo 11/04/2014, 06:06
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 389
Antigüedad: 13 años, 8 meses
Puntos: 16
Respuesta: Problema con acentos mysql-php

Buen dia,

Gracias a todos por responder. pero les comento:

asus090102 hice la prueba de lo del utf8 luego del query pero me sigue dando el problema.
TSG La cuestión es que el problema lo tengo cuando me traigo la información de base de datos. En general yo segui haciendo pruebas y me di cuenta que en el ordenador de mi casa si corre perfectamente la función que hice y el error me da es en el servidor, me puse a verificar los tipos de encoding y resulta q en mi casa coloque como "collation" el "utf8mb4" q según lei es un encoding existente a partir de la version 5.3, sin embargo en el servidor NO tengo ese encoding. La verdad es un poco complejo llegar a que todo funcione perfecto..... como les comenté esa función q hice con postgreSQL funciona perfectamente tambien
__________________
Lo imposible es lo posible visto por los ojos de un incapaz.
Si te sirve la respuesta. dale + al karma.
Saludos
  #5 (permalink)  
Antiguo 11/04/2014, 06:23
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 14 años, 1 mes
Puntos: 123
Respuesta: Problema con acentos mysql-php

Has pensado en utilizar htmlentities()

http:// www.php.net/manual/es/function.htmlentities.php
  #6 (permalink)  
Antiguo 11/04/2014, 07:46
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 10 años, 7 meses
Puntos: 10
Respuesta: Problema con acentos mysql-php

¿En que parte se ven mal los acentos? En phpmyadmin, o la aplicación final?

Si en phpmyadmin (o la herramienta que se esté usando...) se ven bien pero en la aplicación no, quizas tenga que ver con la codificación del archivo en el que se imprime de la app (en notepad++ abrir el archivo, ir a codificación, si no está en UTF8 sin BOM convertirlo en ello)
  #7 (permalink)  
Antiguo 11/04/2014, 08:05
Avatar de alexisverano  
Fecha de Ingreso: septiembre-2008
Ubicación: La Habana.Cuba
Mensajes: 298
Antigüedad: 16 años, 2 meses
Puntos: 36
Respuesta: Problema con acentos mysql-php

Para resolver este tema te propongo que hagas lo siguiente:

En todas tus tablas usa el cotejamiento: utf8_general_ci

En las paginas web:

Código HTML:
Ver original
  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

En la conexion con la base d edatos:

Código PHP:
Ver original
  1. $mysqli = new mysqli(localhost, usuario, clave, basedatos);
  2. $mysqli->query("SET NAMES 'utf8'");

Prueba y cuentanos...
  #8 (permalink)  
Antiguo 11/04/2014, 08:15
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 10 años, 7 meses
Puntos: 10
Respuesta: Problema con acentos mysql-php

Cita:
En la conexion con la base d edatos:
Código PHP:
$mysqli = new mysqli(localhostusuarioclavebasedatos);
$mysqli->query("SET NAMES 'utf8'"); 
Segun php, dicho procedimiento no es recomendado. Por favor, usa en todos casos

Código PHP:
$mysqli = new mysqli(localhostusuarioclavebasedatos);
$mysqli->set_charset("utf8"); //Elegimos el set de caracteres adecuado 
Fuente: http://php.net/manual/en/mysqli.set-charset.php

Cita:
Note:

This is the preferred way to change the charset. Using mysqli_query() to set it (such as SET NAMES utf8) is not recommended. See the MySQL character set concepts section for more information.
Un saludo

Etiquetas: acentos, html, mysql, mysql-php, sql
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 13:17.