Autor
|
Tema: Mostrar caracteres con acento y que salen con simbolo ? (Leído 18,756 veces)
|
Diabliyo
Desconectado
Mensajes: 1.441
shell# _
|
Buenas. Tengo problemas para mostrar unos caracteres que tienen acento, me sale impreso un rombo negro con un símbolo de pregunta al centro. Dichos caracteres acentuados los tome de un archivo de texto que previamente con mi sistema cargue e inserte en mi base de datos, el proceso fue el siguiente: <?php # script mundo.php # sube las ciudades a la BDD cuando inicializas el sitio $file= 'ciudades.csv'; $buf=''; # datos $fp= fopen($file, "r" ); # abrimos stream $i=0; $c=0; $link= conectar(); { $buf= fgets($fp, 2048); # leemos $existe= 'select * from MUNDO_CIUDAD where ID=\''. $i. '\' && CIUDAD=\''. proteger_cadena (substr($x[3], 1, -1)). '\''; { $cons1= 'select * from MUNDO_ESTADO where NUMERO=\''. substr( $x[2], 1, -1). '\' && ID_PAIS=\''. substr( $x[1], 1, -1). '\';'; $cons2= 'insert into MUNDO_CIUDAD( ID, ID_ESTADO, ID_PAIS, CIUDAD ) values( \''. $i. '\', \''. $data1["ID"]. '\', \''. $data1["ID_PAIS"]. '\', \''. proteger_cadena (substr( $x[3], 1, -1 )). '\' );'; $c++; } $i++; } echo 'Insertadas <b>'. $c. '</b> ciudades de <b>'. $i. '</b> recorridos.'; fclose($fp); # cerramos stream ?>
El archivo ciudades.csv contiene algo como esto: numero,codigociudad, altitud, latitud, numerociudad, codigoestado, nombreciudadExisten mas de 100,000 resgistros en ese archivo, asi que con el code que les puse, lo cargue en el sistema y lo inserte. Por mencionar tambien, yo utilizo una funcion llamada proteger_cadena(), que es mas que esto: <?php function proteger_cadena( $cadena ) { } ?>
EL PROBLEMA ya es en la practica, cuando dentro de un SELECT despliego los nombres de las ciudades consultadas, me salen con el simbolo que les mencione.... Para ello, cuando se invoca el SELECT mando imprimir con una funcion llamada: desproteger_candea(), implementada asi: <?php function desproteger_cadena( $cadena ) { $out=$cadena; return $out; } echo 'No hay ciudades...'; else { { echo '<select name="variable"> <option value="'. $buf["ID"]. '" />'. $buf["NOMBRE"]; </select>'; } } ?>
Saludos !
|
|
« Última modificación: 14 Enero 2011, 18:44 pm por Diabliyo »
|
En línea
|
|
|
|
|
Diabliyo
Desconectado
Mensajes: 1.441
shell# _
|
Le paso el html_entity_decode() porque en la BDD los datos se guardan protegidos con htmlentities(), es por eso que se quita, ademas se le pasa htmlentities() a los caracteres que podrian causarme un inyeccion HTML, como: <, >, \n y \t. Todos estos datos se toman en cuenta porque la funcion se aplica para formularios y todo tipo de datos (en formulario intervienen textareas y otros inputs). Alguien sabe como puedo mostrarlos correctamente ?, se imprime asi: �, pero solo dentro del <select>. Saludos !
|
|
|
En línea
|
|
|
|
WHK
|
prueba con <?php header('Content-Type: text/html; charset=ISO-8859-1'); ?> para poder escribir eñes, acentos etc. Si vas a cargar un archivo con ciuddes asegurate de que las guardaste con la misma codificación ISO o ANSI y no utf-8 o si no te va a seguir dando error. Por eso en todos mis scripts les doy en guardar como al principio para elegir la codificación en iso 88591 y luego poner el header en el php. con esto me imprime todos los mismos carácteres que escribo en mi pc sin la necesidad de filtrarlos. <?php header('Content-Type: text/html; charset=ISO-8859-1'); ?> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> Prueba: áéíóú``´´ñÑ ©® etc etc. <br /> á : á
|
|
|
En línea
|
|
|
|
~ Yoya ~
Wiki
Desconectado
Mensajes: 1.125
|
Si establece un juego de carácter a la directiva default_charset del php.ini, no es necesario mandar manualmente el juego de carácter en todo los archivos, ya que default_charset lo mandara. InfoEs recomendable no filtrar los datos que se guardaran en la DB, debes filtrarlo cuando lo vayas a mostrar. Saludos.
|
|
|
En línea
|
Mi madre me dijo que estoy destinado a ser pobre toda la vida. Engineering is the art of balancing the benefits and drawbacks of any approach.
|
|
|
Diabliyo
Desconectado
Mensajes: 1.441
shell# _
|
WHK
Disculpame pero estas en un error, UTF-8 es capaz de imprimir acentos y enies, ya que actualmento uso UTF-8 y no tengro problemas, claro, siempre y cuando esten en el cuerpo y no dentro de un SELECT.
Ademas..., mi apache y mi index.html, los tengo a UTF-8, y pues no quiero cambiarlos porque asi manejo todo mi code, mis funciones, bases, etc, etc....
Existe la manera de dejarlo como UTF-8 y que funcione ?
~Yoya~ Cuando inserto datos en mi BDD, los protejo antes de enviarlos, vaya, les paso la función proteger_cadena() (ya la mencione arriba), y lo hago porque si un usuario escribe algo con un símbolo ' o ", a veces la BDD salta y no inserta, y siendo así, pasando esta función siempre se inserta.
Ya cuando consulto y después voy a imprimir en pantalla algo, utilizo desproteger_cadena(), que en este caso, en el code que puse arriba podrá notas que protegí los caracteres <, >, \n y \t... Pero además también le paso 3 funciones mas que son para convertir caracteres especiales a caritas y traducir el BBCode, pero eso lo borre del code que puse para evitar mostrar mas funciones y despues pregunten "y que hace esa funcion ?, sera la que manda el error..." o cosas asi.
IMPORTANTE
UTF-8 si permite imprimir caracteres con comillas y enies, pero nose porque me esta fallando dentro del SELECT, si es fuera del select, todo va perfecto !
Saludos !
|
|
« Última modificación: 14 Enero 2011, 21:59 pm por Diabliyo »
|
En línea
|
|
|
|
Castg!
Wiki
Desconectado
Mensajes: 1.191
|
NO LE PONGAS EL DECODE!!! Es en vano! Es como que haga: $flota = 1 * 2; $flota = $flota / 2;
El códio te va a quedar igual. Además, la funcion "desproteger_cadena()" para que la usas? Proba tu codigo sin modificaciones pero no uses la funcion desproteger cadena. Pensa, si vos estas protegiendo la cadena para evitar xss, para que desprotegerla? Acaso usas "proteger_cadena()" para que no te cierren la comilla de la consulta al MySQL? Si asi es, podes hacer como yo y usar
para despejar cualquier caracter que te cause error en las consultas.
|
|
|
En línea
|
|
|
|
Diabliyo
Desconectado
Mensajes: 1.441
shell# _
|
NO LE PONGAS EL DECODE!!! Es en vano! Es como que haga: $flota = 1 * 2; $flota = $flota / 2;
El códio te va a quedar igual. Además, la funcion "desproteger_cadena()" para que la usas? Proba tu codigo sin modificaciones pero no uses la funcion desproteger cadena. Pensa, si vos estas protegiendo la cadena para evitar xss, para que desprotegerla? Acaso usas "proteger_cadena()" para que no te cierren la comilla de la consulta al MySQL? Si asi es, podes hacer como yo y usar
para despejar cualquier caracter que te cause error en las consultas. Amigo te estas avionando demasiado con eso, el punto aqui es que el caracter dentro del SELECT sale en forma de simbolo y no como una letra acentuada. Sobre la funcion desproteger_cadena() esta YA MENCIONE CLARAMENTE quue elimine 3 funciones que menciono dentro de desproteger_cadenA(), estas son para interpretar el BBCode, caritas y otras cosas, por eso no puedo consultar e imprimir (echo), debo pasar esta funcion que me brinda todo el servicio (BBcode, Caritas, extras y proteccion). Centremonos en que los acentos dentro del SELECT (unicamente), se imprimen como simbolo :S. Saludos !
|
|
|
En línea
|
|
|
|
Nakp
casi es
Ex-Staff
Desconectado
Mensajes: 6.336
he vuelto :)
|
ehm... lo ideal es que solo lo guardaras escaped y cuando lo imprimas le pases el htmlentities no que lo guardes con htmlentities
|
|
|
En línea
|
Ojo por ojo, y el mundo acabará ciego.
|
|
|
Castg!
Wiki
Desconectado
Mensajes: 1.191
|
si vas a consultar en este foro, proba lo que te decimos. deja desproteger_cadena() con esas funciones que no pusiste, osea la de html_entity_decode y str_replace() borralas. te lo digo porq si no me equivoco, el html entity decode cambia los: á por á, cosa que si lo sacas, en tu faking select se tendria que ver acentuado. sino, hace un str-replace con lo que yo ya te dije. PD: me "aviono demasiado" porq el html decode se "apunta" a tu acento entrada: <pre> <?php $var = "áéíóú"; echo $var."\n"; echo $var."\n"; ?> </pre>
salida: <pre> áéíóú áéíóú áéíóú</pre> me entedes lo que te digo ahora "amigo"?
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Mostrar carácteres en TextBox
.NET (C#, VB.NET, ASP)
|
TheKillerWantsYou
|
1
|
3,686
|
31 Enero 2010, 18:05 pm
por seba123neo
|
|
|
Anular la opcion "mostrar caracteres" XP/Vista/7
Wireless en Windows
|
Reinel
|
1
|
8,144
|
10 Mayo 2010, 17:23 pm
por Reinel
|
|
|
Necesito mostrar caracteres Hexadecimales en C++
Programación C/C++
|
zikotik
|
6
|
3,557
|
8 Diciembre 2012, 20:27 pm
por zikotik
|
|
|
Mostrar todos los caracteres en Excel
Dudas Generales
|
Xedrox
|
0
|
1,747
|
5 Enero 2013, 02:28 am
por Xedrox
|
|
|
dominios con acento.
« 1 2 »
Dudas Generales
|
skan
|
18
|
9,880
|
28 Octubre 2013, 14:27 pm
por skan
|
|