Foros del Web » Programando para Internet » PHP »

No almacena caracteres especiales en bd

Estas en el tema de No almacena caracteres especiales en bd en el foro de PHP en Foros del Web. Hola, me hicieron una pagina web, pero he comprobado que al introducir un nombre con acento en la página, y guardarse en la base de ...
  #1 (permalink)  
Antiguo 29/11/2015, 15:51
 
Fecha de Ingreso: noviembre-2002
Mensajes: 133
Antigüedad: 21 años, 5 meses
Puntos: 0
No almacena caracteres especiales en bd

Hola, me hicieron una pagina web, pero he comprobado que al introducir un nombre con acento en la página, y guardarse en la base de datos se almacena la información sin reconocer estos caracteres especiales. Alguna idea de cómo resolverlo?

Gracias



SHOW VARIABLES LIKE '%char%';
Variable_name Value
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/


SHOW VARIABLES LIKE 'collation%';
Variable_name Value
collation_connection utf8_general_ci
collation_database utf8_spanish_ci
collation_server utf8_spanish_ci
  #2 (permalink)  
Antiguo 29/11/2015, 16:34
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años, 1 mes
Puntos: 8
Respuesta: No almacena caracteres especiales en bd

Cita:
Iniciado por luisgls Ver Mensaje
Hola, me hicieron una pagina web, pero he comprobado que al introducir un nombre con acento en la página, y guardarse en la base de datos se almacena la información sin reconocer estos caracteres especiales. Alguna idea de cómo resolverlo?

Gracias



SHOW VARIABLES LIKE '%char%';
Variable_name Value
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/


SHOW VARIABLES LIKE 'collation%';
Variable_name Value
collation_connection utf8_general_ci
collation_database utf8_spanish_ci
collation_server utf8_spanish_ci
Si utilizas por decir utf8_spanish_ci, es normal que en tu base de datos no puedas apreciar por decir el valor árbol o niño (tal como deseas), pero si visualizas esta información a una casilla de texto por decir, si podrás apreciar los caracteres especiales, incluso si generas un PDF o Excel.

Yo tengo la misma configuración que tienes en mysql
- En mi archivo php.ini
default_charset = "utf-8"

Y en HTML lo siguiente
Código HTML:
Ver original
  1. <html xmlns="http://www.w3.org/1999/xhtml">
  2. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  3.  
  4. ....
  5. </head>
  6. ..
  7. ...
  8. ..

Pero si me dices que
en el caso de árbol se guardar rbol por decir. Quizas tu problema está al momento de hacer los insert o update, para ello deberías de dejar parte de tu código php.
  #3 (permalink)  
Antiguo 29/11/2015, 18:13
 
Fecha de Ingreso: noviembre-2002
Mensajes: 133
Antigüedad: 21 años, 5 meses
Puntos: 0
Respuesta: No almacena caracteres especiales en bd

Estuve también buscando en todos los archivos el texto ISO-8859-1 y lo reemplacé por UTF-8, así que ahora todas las páginas tienen UTF-8, sin embargo persiste el mismo problema.

Por otro lado, me he dado cuenta de que al modificar en la base en datos (a través de phpmyadmin), el texto corregido con el acento, luego en la página web no se muestra el carácter con acento.

¿Qué parte del código php necesitas?
  #4 (permalink)  
Antiguo 29/11/2015, 18:32
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años, 1 mes
Puntos: 8
Respuesta: No almacena caracteres especiales en bd

donde esten los insert por ejemplo y como es que envias datos de tu formulario al php para que sean guardados. Creo que es necesario todo eso para saber donde está el error en especial el insert.

INSERT INTO tabla (campos1,campo2,)VALUES(val1,val2,etc).

Por otro lado, si guardar niño a la base de datos que valor se guarda en la tabla?.
¿Puedes decirme los caracteres que se almacenan? o que otro dato has intentado guardar en tu tabla y como se ve una vez registrada.
  #5 (permalink)  
Antiguo 30/11/2015, 06:00
 
Fecha de Ingreso: noviembre-2002
Mensajes: 133
Antigüedad: 21 años, 5 meses
Puntos: 0
Respuesta: No almacena caracteres especiales en bd

Cuando escribo niño, se ve perfectamente en php, y cuando consulto la base de datos se guarda niño.

Por el contrario si modifico directamente en la base de datos y ahí escribo niño, cuando veo en php, se ve Ni�o

código HTML:
Cita:
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Base de datos: `lugares`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `area`
--

CREATE TABLE IF NOT EXISTS `area` (
`area_id` int(11) NOT NULL AUTO_INCREMENT,
`area_name` varchar(50) COLLATE utf8_spanish_ci NOT NULL,
`eStatus` varchar(10) COLLATE utf8_spanish_ci NOT NULL,
PRIMARY KEY (`area_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=66 ;

--
-- Volcado de datos para la tabla `area`
--

INSERT INTO `area` (`area_id`, `area_name`, `eStatus`) VALUES
(1, 'Huesca', 'Active'),
(6, 'La Coruña', 'Active'),
(46, 'Santa Cruz de Tenerife', 'Active'),
(65, 'niño', 'Active');

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
  #6 (permalink)  
Antiguo 30/11/2015, 17:13
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años, 1 mes
Puntos: 8
Respuesta: No almacena caracteres especiales en bd

Si te refieres a que los carácteres son raros en tu select es normal, pero cuando los llevas a un archivo php o html deberían de mostrarse bien los caracteres especiales.

Pero si lo que quieres es que en tu select se muestre los caracteres especiales puedes utilizar algunas funciones mysql que permiten la conversión.
EJM:

SELECT convert( cast( convert( campo_especial
USING latin1 ) AS binary )
USING utf8 ) AS campo_especial
FROM tabla

De esta manera tu select desde phpadmin podrá mostrarte los caracteres especiales.

De todas maneras... no entiendo cual es el problema, por lo general siempre los querys se muestran en páginas ya sea html, php, reportes (excel y pdf).
Por que deseas tanto que se almacenen los caracteres especiales como deberían de ser en tu campo.

Última edición por oggy_15_3; 30/11/2015 a las 19:40
  #7 (permalink)  
Antiguo 01/12/2015, 03:34
 
Fecha de Ingreso: noviembre-2002
Mensajes: 133
Antigüedad: 21 años, 5 meses
Puntos: 0
Respuesta: No almacena caracteres especiales en bd

Cita:
Iniciado por oggy_15_3 Ver Mensaje
Si te refieres a que los carácteres son raros en tu select es normal, pero cuando los llevas a un archivo php o html deberían de mostrarse bien los caracteres especiales.

Pero si lo que quieres es que en tu select se muestre los caracteres especiales puedes utilizar algunas funciones mysql que permiten la conversión.
EJM:

SELECT convert( cast( convert( campo_especial
USING latin1 ) AS binary )
USING utf8 ) AS campo_especial
FROM tabla

De esta manera tu select desde phpadmin podrá mostrarte los caracteres especiales.

De todas maneras... no entiendo cual es el problema, por lo general siempre los querys se muestran en páginas ya sea html, php, reportes (excel y pdf).
Por que deseas tanto que se almacenen los caracteres especiales como deberían de ser en tu campo.
El motivo es que se utiliza también la consulta a la base de datos por el ejemplo a la palabra niño y si el texto está correctamente escrito en la base de datos, devuelve un valor correcto aunque se vea con caracteres extraños, cosa que no pasa de forma contraria
  #8 (permalink)  
Antiguo 01/12/2015, 11:55
Avatar de herzbazi  
Fecha de Ingreso: febrero-2012
Mensajes: 612
Antigüedad: 12 años, 2 meses
Puntos: 36
Respuesta: No almacena caracteres especiales en bd

yo colocaria en la conexion set utf8
en el cotejamiento de la db utf8
en el archivo html o php <meta charset="utf-8">

con eso debe de funcionar

si quieres te ayudo me contactas ok
nos vemos
__________________
Enseña todo lo que sepas...
Aprende todo lo que puedas..
  #9 (permalink)  
Antiguo 01/12/2015, 13:04
Avatar de agusax  
Fecha de Ingreso: junio-2011
Ubicación: Puerto Real (Cádiz)
Mensajes: 74
Antigüedad: 12 años, 10 meses
Puntos: 3
Respuesta: No almacena caracteres especiales en bd

No se si podría solucionarse así, pero has probado a utilizar utf8_encode y utf8_decode?

Tratas la cadena de caracteres con esa instrucción y después la insertas (Encode)
Y después extraes la cadena con Decode.

Espero que funcione con eso.
__________________
"Nunca confíes en un ordenador que no puedas lanzar por una ventana" -- Steve Wozniak
"El software es como el sexo: mejor si es libre y gratis" -- Linus Torvalds
  #10 (permalink)  
Antiguo 01/12/2015, 16:14
Avatar de emilio_viguri  
Fecha de Ingreso: junio-2011
Ubicación: Mexico
Mensajes: 116
Antigüedad: 12 años, 10 meses
Puntos: 3
Respuesta: No almacena caracteres especiales en bd

Haber si te gusta esto guarda

De tu cadena la transforma y te la deja en formato HTML eso lo puedes guardar en la base de datos

Código PHP:
Ver original
  1. <?
  2. function FlimpiadatosHTML($cadena){
  3.     $cadena = trim(utf8_encode($cadena));  
  4.     $patron = array("'", '°', '<', '>', '"', '¡', '¿', '®', '©', '€', 'á', 'é', 'í', 'ó', 'ú', 'ñ', 'ü', 'Á', 'É', 'Í', 'Ó', 'Ú', 'Ñ', 'Ü');
  5.    
  6.     $sustitucion = array('&prime;', ' &deg;', '&lt;', '&gt;', '&quot;', '&iexcl;', '&iquest;', '&reg;', '&copy;', '&euro;', '&aacute;', '&eacute;', '&iacute;', '&oacute;', '&uacute;', '&ntilde;', '&uuml;', '&Aacute;', '&Eacute;', '&Iacute;', '&Oacute;', '&Uacute;', '&Ntilde;', '&Uuml;');
  7.    
  8.     for($i=0; $i<=count($patron); $i++)
  9.         $cadena = str_replace($patron[$i], $sustitucion[$i], $cadena);
  10.            
  11.     return $cadena;
  12. }
  13. ?>
  #11 (permalink)  
Antiguo 02/12/2015, 01:32
 
Fecha de Ingreso: diciembre-2015
Mensajes: 8
Antigüedad: 8 años, 5 meses
Puntos: 1
Respuesta: No almacena caracteres especiales en bd

Hola amigo yo tambien he batallado mucho con eso, pero encontre la solucion añadiendo esta linea despues del query que hace la conexion a la base de datos.

Si utilizas Mysqli:
mysqli_set_charset($mysqli, "utf8");

Si utilizas Mysql:
mysql_query("SET NAMES 'utf8'");

Espero te sirva!

Etiquetas: bd, caracteres, especiales, sql, variable
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:42.