Foros del Web » Programando para Internet » PHP »

Poblema la insertar Ñ y tildes en la DB

Estas en el tema de Poblema la insertar Ñ y tildes en la DB en el foro de PHP en Foros del Web. Hola amigos, verán estoy tratando de insertar letras Ñ/ñ y acentos en la DB y no he podido localizar el problema... Para la prueba estoy ...
  #1 (permalink)  
Antiguo 20/07/2009, 19:47
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Poblema la insertar Ñ y tildes en la DB

Hola amigos, verán estoy tratando de insertar letras Ñ/ñ y acentos en la DB y no he podido localizar el problema...

Para la prueba estoy usando este formulario:

Código PHP:
<?php
if (isset($_POST['clickonbutton'])
{
$conexion mysql_connect("localhost""root""pass");
mysql_select_db("cartas"$conexion);
 
$sql "INSERT INTO carta (texto) VALUES ('$texto')";
 
$result mysql_query($sql);

echo 
$_POST['texto'];
}
?>
<form action="" method="post">
<textarea name="texto"></textarea><br />
<input type="submit" value="Enviar" name="clickonbutton"/><br />
</form>
Como pueden ver en este mismo arhivo puedo ver lo que he insertado en la DB y las letras Ñ/ñ y tildes se ven normal, como deben verse, pero cuando voy a my PhpMyAdmin y examino mi tabla, observo que los valores en el campo texto fueron insertados asi:

ññññ(para las ñ)| o |óóóó(para los acentos)


Verifique si estaba usando DEFAULT CHARSET=utf8 en la DB y si lo tengo puesto asi,? Cual podria ser el problema.

Muchas gracias
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #2 (permalink)  
Antiguo 20/07/2009, 20:08
Avatar de bioxido  
Fecha de Ingreso: diciembre-2008
Ubicación: $_SERVER['PHP_SELF']
Mensajes: 601
Antigüedad: 15 años, 5 meses
Puntos: 21
Respuesta: Poblema la insertar Ñ y tildes en la DB

podrias usar htmlentities() antes de insertar los datos. ...asi no tendrias ese problema y se te veria bien en cualquier navegador...
  #3 (permalink)  
Antiguo 20/07/2009, 20:17
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Poblema la insertar Ñ y tildes en la DB

muchas gracias amigo, estoy probando....

Gracias


EDITO **


AMIGO tengo el problema, no se usarlo en el PHP, me podrias dar un ejemplo de como ponerlo en el script de arriba??

Muchas gracias amigo.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #4 (permalink)  
Antiguo 20/07/2009, 20:39
Avatar de bioxido  
Fecha de Ingreso: diciembre-2008
Ubicación: $_SERVER['PHP_SELF']
Mensajes: 601
Antigüedad: 15 años, 5 meses
Puntos: 21
Respuesta: Poblema la insertar Ñ y tildes en la DB

Código PHP:

<?php
if (isset($_POST['clickonbutton'])
{
$texto htmlentities($texto); //<-----
$conexion mysql_connect("localhost""root""pass");
mysql_select_db("cartas"$conexion);
 
$sql "INSERT INTO carta (texto) VALUES ('$texto')";
 
$result mysql_query($sql);

echo 
$_POST['texto'];
}
?>
<form action="" method="post">
<textarea name="texto"></textarea><br />
<input type="submit" value="Enviar" name="clickonbutton"/><br />
</form>
Veo que en tu script insertas la variable $texto pero no veo que definas esa variable, y despues, mas abajo haces un echo del $_POST (echo $_POST['texto'];)

Si $_POST['texto'] contiene la misma info que $texto , porque no la definis antes de insertar?

Resumiendo, yo lo haria así:

Código PHP:
<?php
if (isset($_POST['clickonbutton'])
{
$texto $_POST['texto'];

$texto htmlentities($texto); //<-----

$conexion mysql_connect("localhost""root""pass");
mysql_select_db("cartas"$conexion);
 
$sql "INSERT INTO carta (texto) VALUES ('$texto')";
 
$result mysql_query($sql);

echo 
$texto;
}
?>
<form action="" method="post">
<textarea name="texto"></textarea><br />
<input type="submit" value="Enviar" name="clickonbutton"/><br />
</form>
  #5 (permalink)  
Antiguo 20/07/2009, 21:46
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Poblema la insertar Ñ y tildes en la DB

Hola, bueno gracias voy a probar, aunque la variable texto de htmlentities no deberia ir asi????

Código PHP:
<?php
$texto 
$_POST['texto']
$texto. = htmlentities($texto);
?>
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #6 (permalink)  
Antiguo 20/07/2009, 22:15
Avatar de bioxido  
Fecha de Ingreso: diciembre-2008
Ubicación: $_SERVER['PHP_SELF']
Mensajes: 601
Antigüedad: 15 años, 5 meses
Puntos: 21
Respuesta: Poblema la insertar Ñ y tildes en la DB

umm no es necesario...
  #7 (permalink)  
Antiguo 20/07/2009, 22:18
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Poblema la insertar Ñ y tildes en la DB

no me funciona amigo =S

Se me ocurre algo, voy a preguntarlo en otro tema, muchas gracias
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #8 (permalink)  
Antiguo 20/07/2009, 22:29
Avatar de bioxido  
Fecha de Ingreso: diciembre-2008
Ubicación: $_SERVER['PHP_SELF']
Mensajes: 601
Antigüedad: 15 años, 5 meses
Puntos: 21
Respuesta: Poblema la insertar Ñ y tildes en la DB

eso que pusiste, en el primer mensaje, es todo el script o que?...

Lo digo por la variable $texto que no veo donde la definis....si ya la definiste entonces no vas a necesitar $texto = $_POST['texto'];
  #9 (permalink)  
Antiguo 20/07/2009, 23:06
Avatar de bioxido  
Fecha de Ingreso: diciembre-2008
Ubicación: $_SERVER['PHP_SELF']
Mensajes: 601
Antigüedad: 15 años, 5 meses
Puntos: 21
Respuesta: Poblema la insertar Ñ y tildes en la DB

hizo rollback de 20min mas o menos el foro asique no esta el tema que creaste, te repondo de nuevo aca:

Código PHP:

$string 
'año mes día';

$string htmlentities($string); //Devuelve -> 'a&ntilde;o d&iacute;a mes' 
eso es lo que necesitas, ahi un ejemplo de como se usa...
  #10 (permalink)  
Antiguo 20/07/2009, 23:16
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Poblema la insertar Ñ y tildes en la DB

muchs gracias amigo.

Lo estoy probando, gracias.

EDITO: LA solucion es:

Código PHP:
<?
//INICIO DE LA COMPROBACION DE CARACTERES ESPECIALES
    
class unicode_replace_entities {
        public function 
UTF8entities($content="") {
            
$contents $this->unicode_string_to_array($content);
            
$swap "";
            
$iCount count($contents);
            for (
$o=0;$o<$iCount;$o++) {
                
$contents[$o] = $this->unicode_entity_replace($contents[$o]);
                
$swap .= $contents[$o];
            }
            return 
mb_convert_encoding($swap,"UTF-8");
        }

        public function 
unicode_string_to_array$string ) { 
            
$strlen mb_strlen($string);
            while (
$strlen) {
                
$array[] = mb_substr$string01"UTF-8" );
                
$string mb_substr$string1$strlen"UTF-8" );
                
$strlen mb_strlen$string );
            }
            return 
$array;
        }

        public function 
unicode_entity_replace($c) { 
            
$h ord($c{0});   
            if (
$h <= 0x7F) {
                return 
$c;
            } else if (
$h 0xC2) {
                return 
$c;
            }
           
            if (
$h <= 0xDF) {
                
$h = ($h 0x1F) << | (ord($c{1}) & 0x3F);
                
$h "&#" $h ";";
                return 
$h;
            } else if (
$h <= 0xEF) {
                
$h = ($h 0x0F) << 12 | (ord($c{1}) & 0x3F) << | (ord($c{2}) & 0x3F);
                
$h "&#" $h ";";
                return 
$h;
            } else if (
$h <= 0xF4) {
                
$h = ($h 0x0F) << 18 | (ord($c{1}) & 0x3F) << 12 | (ord($c{2}) & 0x3F) << | (ord($c{3}) & 0x3F);
                
$h "&#" $h ";";
                return 
$h;
            }
        }
    }
####################### FIN DE LA COMPROBACION de letras especiales
    
$content "Mí texto con todas lás tíldes qúe se me ocura y las eÑes ñeññeñeñeñeñeeñe ñéñóñáñí";
    
$oUnicodeReplace = new unicode_replace_entities();
    
$content $oUnicodeReplace->UTF8entities($content);

echo 
$content;
?>
Espero esto pueda ayudar a futuras generaciones y claro que este tema sea indenizado por google, porque yo no pude encontrar nade de esto en San Google.!!!
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.

Última edición por iovan; 21/07/2009 a las 02:13
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 05:51.