Comunidad de diseño web y desarrollo en internet online

Incompatibilidad de carácteres

Citar            
MensajeEscrito el 04 Abr 2011 03:44 pm
Hola. Yo tengo mi base de datos con los nombres guardados con acentos.
Cuando cargo mi php, los textos estáticos (html) que llevan acento se ven bien, pero los dinámicos, se ven mal o no se ven. Antes no pasaba, pero he rehecho la web y ahora pasa. Que tengo que hacer?

Muchas gracias

Por marticps

Claber

103 de clabLevel



Genero:Masculino  

Aprendiz de Todo

chrome
Citar            
MensajeEscrito el 04 Abr 2011 05:31 pm
con que codificacion estas guardando los textos en la base de datos, lo más sano seria que los guardes con UTF-8 y que los caracteres especiales los almacenes como su respectiva codificacion html p.ej. á = á luego cuando lo cargues dinamicamente no te dara problemas.

Por NeoCesar

Claber

1415 de clabLevel

14 tutoriales

Genero:Masculino  

Algun lugar dentro de la Matrix (Lima - Perú)

chrome
Citar            
MensajeEscrito el 04 Abr 2011 06:16 pm
Tengo UTF-8 tanto en el html como en la base de datos. El problema es que tengo cantidad de datos i convertirlo seria un autentico palo...

Por marticps

Claber

103 de clabLevel



Genero:Masculino  

Aprendiz de Todo

chrome
Citar            
MensajeEscrito el 04 Abr 2011 06:18 pm
Ya lo he resuelto, en lugar de UTF-8 en el html he puesto iso-8859-1 y se ha solventado. Muchas Gracias

Por marticps

Claber

103 de clabLevel



Genero:Masculino  

Aprendiz de Todo

chrome
Citar            
MensajeEscrito el 04 Abr 2011 06:22 pm
Solo como dato adicional, supongo que estas usando PHP y MySQL, para enviar una cadena de texto ya codificada a MySQL sin mucho trabajo puedes usar la sentencia

Código PHP :

htmlentities('cadena',ENT_NOQUOTES,"UTF-8");
de esa manera php se encarga de codificar todos los caracteres especiales que hubieran en tu texto.

Por NeoCesar

Claber

1415 de clabLevel

14 tutoriales

Genero:Masculino  

Algun lugar dentro de la Matrix (Lima - Perú)

chrome
Citar            
MensajeEscrito el 04 Abr 2011 06:22 pm
Ahora en los campos dinámicos si aparecen los acentos, però en los cuadros de introduccion de texto dinámicos, donde en mysql hay un acento todo el campo aparece vacío...

Por marticps

Claber

103 de clabLevel



Genero:Masculino  

Aprendiz de Todo

chrome
Citar            
MensajeEscrito el 04 Abr 2011 06:23 pm

NeoCesar escribió:

Solo como dato adicional, supongo que estas usando PHP y MySQL, para enviar una cadena de texto ya codificada a MySQL sin mucho trabajo puedes usar la sentencia

Código PHP :

htmlentities('cadena',ENT_NOQUOTES,"UTF-8");
de esa manera php se encarga de codificar todos los caracteres especiales que hubieran en tu texto.


Ahá, muchas gracias, seguro que si hago otro trabajo lo utilizaré para ahorrarme problemas.
:D

Por marticps

Claber

103 de clabLevel



Genero:Masculino  

Aprendiz de Todo

chrome
Citar            
MensajeEscrito el 04 Abr 2011 06:31 pm
Si ya tienes almacenada la data en tu BD y quieres corregir y pasar a a usar las entidades html puedes utilizar un pequeño script, algo como:

Código PHP :

$q_A = " SELECT Id, campo FROM tabla ";
$A   = mysql_query($q_A) or die(mysql_error());
$r_A = mysql_fetch_assoc($A);
do {
  $Id     = $r_A['Id'];
  $cadena = htmlentities($r_A['campo'],ENT_NOQUOTES,'UTF-8');
  $q_U    = " UPDATE tabla SET campo='$cadena' WHERE Id='$Id' ";
  $U      = mysql_query($q_U) or die (mysql_error());
} while ($r_A = mysql_fetch_assoc($A));
Con eso tu "campo" pasara a estar codificado en poco tiempo y con poco esfuerzo. Si gusta pruebalo y nos cuentas como te fue.

COPY, PASTE, PLAY AND ENJOY.

Por NeoCesar

Claber

1415 de clabLevel

14 tutoriales

Genero:Masculino  

Algun lugar dentro de la Matrix (Lima - Perú)

chrome
Citar            
MensajeEscrito el 04 Abr 2011 06:41 pm
Se ha quedado el campo en blanco, en lugar de poner-se en utf-8...

Por marticps

Claber

103 de clabLevel



Genero:Masculino  

Aprendiz de Todo

chrome
Citar            
MensajeEscrito el 04 Abr 2011 06:53 pm
Que extraño 100pre uso ese script para codificar las bases cuando me llegan con tildes y otros caracteres, para que pruebes si esta recuperando bien la data añade esta linea despues del update pero antes del segundo mysql_query:

Código PHP :

echo $campo; //Deberia mostar en pantalla la cadena tal como se deberia de ver con tildes y demas pero al ver el código esta serian entidades html.
echo "<br/>";
echo htmlentities($q_U) //Esto mostrara en pantalla la sentencia tal cual va a ser enviada a MySQL
// Ahora añadiremos un seguro para evitar que pase un campo en blanco
if (trim($campo)!='') { // El trim borra los espacios en blanco antes y despues del texto
  $U      = mysql_query($q_U) or die (mysql_error());
} else {
  echo "Error: Se intenta almacenar un campo en blanco"
}
El código completo quedaría asi:

Código PHP :

$q_A = " SELECT Id, campo FROM tabla ";
$A   = mysql_query($q_A) or die(mysql_error());
$r_A = mysql_fetch_assoc($A);
do {
  $Id     = $r_A['Id'];
  $cadena = htmlentities($r_A['campo'],ENT_NOQUOTES,'UTF-8');
  echo "Cadena = ".$cadena ;
  echo "<br/>";
  $q_U    = " UPDATE tabla SET campo='$cadena' WHERE Id='$Id' ";
  echo "Query = ".htmlentities($q_U);
  echo "<br/>";
  if (trim($cadena)!='') {
    $U      = mysql_query($q_U) or die (mysql_error());
  } else {
    echo "Error: Se intenta almacenar un campo en blanco";
    die();
  }
} while ($r_A = mysql_fetch_assoc($A));

Por NeoCesar

Claber

1415 de clabLevel

14 tutoriales

Genero:Masculino  

Algun lugar dentro de la Matrix (Lima - Perú)

chrome
Citar            
MensajeEscrito el 04 Abr 2011 06:55 pm
Resultado:

Cadena =
Query = UPDATE profes SET referencies='' WHERE id='7'
Error: Se intenta almacenar un campo en blanco

Muchas Gracias por tu esfuerzo :)

Por marticps

Claber

103 de clabLevel



Genero:Masculino  

Aprendiz de Todo

chrome
Citar            
MensajeEscrito el 04 Abr 2011 06:57 pm
Puedes postear 1 ejemplo de exactametne que tienes en la BD, tal cual como lo tienes almacenado, solo 1 por ejemplo el que indicas arriba el registro 7 cual era la cadena orignal que estaba almacenada en "referencies"

Por NeoCesar

Claber

1415 de clabLevel

14 tutoriales

Genero:Masculino  

Algun lugar dentro de la Matrix (Lima - Perú)

chrome
Citar            
MensajeEscrito el 04 Abr 2011 06:58 pm
Tabla profes, campo referencies:
La cadena es "Càp" (sin las comillas)

Por marticps

Claber

103 de clabLevel



Genero:Masculino  

Aprendiz de Todo

chrome
Citar            
MensajeEscrito el 04 Abr 2011 07:07 pm
Ya tengo tu solucion, probada, Elimina la parte de " , 'UTF-8' " de la sentencia htmlentities(), al parecer genera un conflicto con las tildes invertidas como la de tu ejemplo, al eliminar ese parametro convierte la cadena trankilamente

Por NeoCesar

Claber

1415 de clabLevel

14 tutoriales

Genero:Masculino  

Algun lugar dentro de la Matrix (Lima - Perú)

chrome
Citar            
MensajeEscrito el 04 Abr 2011 07:37 pm
¡Correcto!
Ahora la cadena es C&agrave;p

el problema es que el campo de insercion de texto, la cadena tambien se escribe C&agrave;p en lugar de Càp...

Muchisimas gracias

Por marticps

Claber

103 de clabLevel



Genero:Masculino  

Aprendiz de Todo

chrome
Citar            
MensajeEscrito el 04 Abr 2011 07:40 pm
ok para eso necesitas la instruccion contraria a htmlentities que es html_entity_decode, entonces donde vayas a poner el contenido de la columna "referencies" en vez de poner
$r_A['referencies'] pones html_entity_decode($r_A['referencies'],ENT_NOQUOTES); y listo con eso deberías ver correctamente la info

Por NeoCesar

Claber

1415 de clabLevel

14 tutoriales

Genero:Masculino  

Algun lugar dentro de la Matrix (Lima - Perú)

chrome
Citar            
MensajeEscrito el 04 Abr 2011 07:42 pm
Funcionó, pero en parte:
Se ve esto:

Càp

Por marticps

Claber

103 de clabLevel



Genero:Masculino  

Aprendiz de Todo

chrome
Citar            
MensajeEscrito el 04 Abr 2011 07:43 pm
Como has usado iso-8859-1 para almacenarlo en la BD, entonces ponlo así html_entity_decode($r_A['referencies'],ENT_NOQUOTES,'ISO-8859-1'); con eso deberias de verlo bien

Por NeoCesar

Claber

1415 de clabLevel

14 tutoriales

Genero:Masculino  

Algun lugar dentro de la Matrix (Lima - Perú)

chrome
Citar            
MensajeEscrito el 04 Abr 2011 07:49 pm
Exacto!!

Muchisimas gracias! Ahora lo hare con todos los demás campos!!

Funciona a la perfección :)

Por marticps

Claber

103 de clabLevel



Genero:Masculino  

Aprendiz de Todo

chrome
Citar            
MensajeEscrito el 04 Abr 2011 08:28 pm
Solamente una cosa más (me sabe mal molestar tanto):
Ahora en mis páginas html aparecen acentos y en el codigo estan escritos con sus entidades correspondientes (iso-8859-1). Aun asi no consigo que se vean como deberían (aparecen símbolos raros como el à y otros...)

Muchas gracias.

Por marticps

Claber

103 de clabLevel



Genero:Masculino  

Aprendiz de Todo

chrome
Citar            
MensajeEscrito el 04 Abr 2011 08:29 pm
estas usando html_entity_decode($r_A['referencies'],ENT_NOQUOTES,'ISO-8859-1'); en todos esos casos?

Por NeoCesar

Claber

1415 de clabLevel

14 tutoriales

Genero:Masculino  

Algun lugar dentro de la Matrix (Lima - Perú)

chrome
Citar            
MensajeEscrito el 04 Abr 2011 08:33 pm
Ahora yo hablo de html, no de php... ya sé que no es el foro adecuado, pero por no abrir un nuevo tema.
Cuando había php he utilizado la fórmula que me has dicho y funciona a la perfección, pero en html también la tego que usar?

Muchas gracias ;)

Por marticps

Claber

103 de clabLevel



Genero:Masculino  

Aprendiz de Todo

chrome
Citar            
MensajeEscrito el 04 Abr 2011 08:34 pm
haber si vamos a seguir por esta via da para largo contactame por mi Gtalk [email protected]

Por NeoCesar

Claber

1415 de clabLevel

14 tutoriales

Genero:Masculino  

Algun lugar dentro de la Matrix (Lima - Perú)

chrome
Citar            
MensajeEscrito el 04 Abr 2011 08:35 pm
Ok ;)

Por marticps

Claber

103 de clabLevel



Genero:Masculino  

Aprendiz de Todo

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.