Foros del Web » Programando para Internet » PHP »

charset en base y al mostrar

Estas en el tema de charset en base y al mostrar en el foro de PHP en Foros del Web. hola amigos estyo usando mysql en mis tablas asi: ENGINE=MyISAM AUTO_INCREMENT=66 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci; en mi codigo de php antes de almacenar hago esto $usr_aspirante_nom ...
  #1 (permalink)  
Antiguo 02/04/2008, 21:39
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
charset en base y al mostrar

hola amigos estyo usando mysql en mis tablas
asi:

ENGINE=MyISAM AUTO_INCREMENT=66 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

en mi codigo de php antes de almacenar hago esto

$usr_aspirante_nom = capitalizar($_POST['txnombre']);//campo nombre

$usr_aspirante_nom_Seg = strip_tags(mysql_real_escape_string($usr_aspirante _nom));

y ya despues hago el insert usando ya la variable $usr_aspirante_programa_Seg

si el dato lleva acento o ñ en la base me lo guarda asi:
en este caso quise poner Olívia y me almaceno Olã*via

y cuando muestro el datos en pantalla con html
sale asi :Ol��via (en pantalla salen un par de cuadritos en lugar de lo signos de interrogacíon)

que tengo que hacer?? para resolvert este problema

espero sus comentarios
saludos

gracias
__________________
gerardo

Última edición por chalchis; 02/04/2008 a las 21:56
  #2 (permalink)  
Antiguo 02/04/2008, 21:44
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: charset en base y al mostrar

¿Que codificación usas en tus archivos php?

Saludos.
  #3 (permalink)  
Antiguo 02/04/2008, 21:48
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Re: charset en base y al mostrar

pues en loas archivos php no le pongo nada

pero en el php.ini esta asi

; PHP's built-in default is text/html
default_mimetype = "text/html"
;default_charset = "iso-8859-1"

__________________
gerardo
  #4 (permalink)  
Antiguo 02/04/2008, 21:54
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Pregunta Re: charset en base y al mostrar

ya intente poner en el php.ini
default_charset = "UTF-8"

y nop me sigue guardando y mostrando los datos como lo comente al inicio

saludos
espero sus comentarios
__________________
gerardo
  #5 (permalink)  
Antiguo 02/04/2008, 21:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: charset en base y al mostrar

En tus html, deberias de poner esta cabecera entre tus <head> y </head>:
Código HTML:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
Saludos.
  #6 (permalink)  
Antiguo 02/04/2008, 21:59
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Re: charset en base y al mostrar

sip en mi html les pongo asi

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

saludos

espero tus comentarios
pero aun asi me sigue pasando ese detalle de los caracteres
__________________
gerardo
  #7 (permalink)  
Antiguo 03/04/2008, 00:42
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Re: charset en base y al mostrar

ahora lo que hice fue guadar los documentos php en su parte codificacion utf8 uso zend studio

la otra le agregue en donde use
<?php
header('Content-Type: text/html; charset=UTF-8');


y cuando hago un insert o select antes del query
puse estas dos lineas

mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
$insertar_resultado = tablas_almacenar($insertar_campos, $insertar_tabla, $insertar_valores, $conect_conexion);
if($insertar_resultado)
{
echo "información almacenada";
echo "1: ".$usr_aspirante_nom_Seg;
echo "<br>";
echo "2: ".$_POST['txnombre'];
echo "<br>";
echo "3: ".$usr_aspirante_nom;
}

?>


hice una prueba de impresion
y vi que cuando imprimo directamente $_POST['txnombre'];
imprime si tecleamos en campo Día me lo guadar bien

pero si uso esto
$usr_aspirante_nomtutor_Seg = strip_tags(mysql_real_escape_string($_POST['txnombre']));

me guarda D??a pone sigonos de interrogacion ya sea en acentos o ñ pone doble ??

que debo hacer o estoy usando mas los elementos de seguridad para en caso de inyeccion de sql

saludos
espero sus comentarios
__________________
gerardo
  #8 (permalink)  
Antiguo 03/04/2008, 11:55
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: charset en base y al mostrar

Al usar mysql_real_escape_string, el segundo parámetro es el identificador, a tu conexión para que use el charset de tu servidor, debes de pasárselo como parámetro:
Código PHP:
// $link es el link a tu base de datos (lo obtienes de mysql_connect() )
$usr_aspirante_nomtutor_Seg strip_tags(mysql_real_escape_string($_POST['txnombre'], $link)); 
Saludos.
  #9 (permalink)  
Antiguo 03/04/2008, 12:22
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Pregunta Re: charset en base y al mostrar

sigo con el mismo problema

hola amigos necesto salir de una duda uso estos comando y utf-8 en html

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
y en la parte de php

<?
//desde el inicio pongo
header('Content-Type: text/html; charset=UTF-8');
?>

en el php.ini
; PHP's built-in default is text/html
default_mimetype = "text/html"
;default_charset = "iso-8859-1"
default_charset = "UTF-8"


y en las tablas
puse utf-8 unicode y collation: utf-8_general_ci


$usr_aspirante_nom_Seg = strip_tags(mysql_real_escape_string($usr_aspirante _nom));

digamos que se tecleo José
pero al guadar lo almacena Josã©

es correcto o realmente debe guardar José
y cuando quiero mostrar el dato me sale
jos?e

lo que mas me interesa si es correcto que lo alamcene asi Josã©


saludos
espero sus comentarios
__________________
gerardo
  #10 (permalink)  
Antiguo 03/04/2008, 12:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: charset en base y al mostrar

Si ves el post que te puse, debes de pasarle el parámetro a mysql_real_escape_string para que te respete el UTF8.

Saludos.
  #11 (permalink)  
Antiguo 03/04/2008, 12:32
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Re: charset en base y al mostrar

Cita:
Iniciado por GatorV Ver Mensaje
Si ves el post que te puse, debes de pasarle el parámetro a mysql_real_escape_string para que te respete el UTF8.

Saludos.
upsps si disculpa intente agregar el id conexion
$usr_aspirante_nomtutor_Seg = strip_tags(mysql_real_escape_string($_POST['txnombre'], $link));

pero pues no paso nada me sigue almacenando por ejmplo
si escribi josé me guadar Josã©
__________________
gerardo
  #12 (permalink)  
Antiguo 03/04/2008, 14:32
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Re: charset en base y al mostrar

ok hice esta prueba mande a imprimir antes de guadar en la base de datos esto

strip_tags(mysql_real_escape_string($usr_aspirante _nom))

y me aparece bien la palabra con acento el problema por lo que veo en mysql

__________________
gerardo
  #13 (permalink)  
Antiguo 03/04/2008, 15:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: charset en base y al mostrar

Entonces el cotejamiento que tienes en tu base de datos es el incorrecto, asegúrate que sea utf8.

Saludos.
  #14 (permalink)  
Antiguo 04/04/2008, 10:50
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Sonrisa Re: charset en base y al mostrar

hola amigos nuevamente molestanto solo para avisar
que tuve que regresarme desde el principio porque los acentos se guardan mal en mi base de mysql

bueno me di cueta que uso una funcion para capitalizar las palabras en minusculas y desde ahi me arroja los caracteres rarros asi que modifique la rutina ya que en el manual de php indican que el uso de strtolower con acentos puede haber ciertos cambios

bueno asi tenia mi funcíon

function capitalizar($nombre)
{
// aca definimos un array de articulos (en minuscula)
// aunque lo puedes definir afuera y declararlo global aca
$cap_articulos[] = 'a';
$cap_articulos[] = 'de';
$cap_articulos[] = 'del';
$cap_articulos[] = 'la';
$cap_articulos[] = 'los';
$cap_articulos[] = 'las';
$cap_articulos[] = 'y';
// explotamos el nombre
$cap_palabras = explode(' ', $nombre);
// creamos la variable que contendra el nombre
// formateado
$nuevoNombre = '';
// parseamos cada palabra
foreach($cap_palabras as $elemento)
{
// si la palabra es un articulo
if(in_array(trim(strtolower($elemento)), $cap_articulos))
{
// concatenamos seguido de un espacio
$nuevoNombre .= strtolower($elemento)." ";
}
else
{
// sino, es un nombre propio, por lo tanto aplicamos
// las funciones y concatenamos seguido de un espacio
$nuevoNombre .= ucfirst(strtolower($elemento))." ";
}
}
return trim($nuevoNombre);
}


luego la cambien asi:

function capitalizar($nombre)
{
// aca definimos un array de articulos (en minuscula)
// aunque lo puedes definir afuera y declararlo global aca
$outputString = utf8_decode($nombre);
$outputString = strtolower($outputString);
$nombre = utf8_encode($outputString);

$cap_articulos[] = 'a';
$cap_articulos[] = 'de';
$cap_articulos[] = 'del';
$cap_articulos[] = 'la';
$cap_articulos[] = 'los';
$cap_articulos[] = 'las';
$cap_articulos[] = 'y';
// explotamos el nombre
$cap_palabras = explode(' ', $nombre);
// creamos la variable que contendra el nombre
// formateado
$nuevoNombre = '';
// parseamos cada palabra
foreach($cap_palabras as $elemento)
{
// si la palabra es un articulo
//if(in_array(trim(strtolower($elemento)), $cap_articulos))
if(in_array(trim($elemento), $cap_articulos))
{
// concatenamos seguido de un espacio
$nuevoNombre .= $elemento." ";
}
else
{
// sino, es un nombre propio, por lo tanto aplicamos
// las funciones y concatenamos seguido de un espacio
$nuevoNombre .= ucfirst($elemento)." ";
}
}
return trim($nuevoNombre);
}


ahora voy a comprobar si ya puedo guardar bien
en un momento les aviso

saludos
__________________
gerardo
  #15 (permalink)  
Antiguo 04/04/2008, 10:59
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Re: charset en base y al mostrar

pues nada me sigue guardando los acentos y ñ con caracteres raros

puse Gérardo

y lo guardo
Gérardo
__________________
gerardo
  #16 (permalink)  
Antiguo 04/04/2008, 11:14
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Re: charset en base y al mostrar

bueno parece que ya se resolvio

agregue esto antes del insert
mysql_query("SET NAMES 'utf8'", $conect_conexion);
mysql_query("SET CHARACTER SET 'utf8'", $conect_conexion);

y ya guardo los datos bien
__________________
gerardo
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 07:23.