elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Palabras Acentuadas problema al mostrar !
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Palabras Acentuadas problema al mostrar !  (Leído 5,621 veces)
Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Palabras Acentuadas problema al mostrar !
« en: 1 Noviembre 2014, 17:56 pm »

Buen dia.

Tengo dos sitios web, en uno tengo mi sistema de almacen donde subo todos los productos.
Y el segundo sitio web es la pagina de Ventas, medante un API que desarrolle jalo la informacion del almacen (sitio web 1).

En el Sitio Web 1 (uno) no tengo problemas para guardar y editar la informacion de mis productos con acento, por ejemplo si el titulo del producto lleva acento, este se guarda sin problemas y cuando intento editar lo miro perfectamente.

En el Sitio Web 2 (dos) cuando jalo la informacion siempre me salen las palabras con acento mal impresas :(, por ejemplo la letra o acentuada, se me imprime asi: ó.

Ya verifique que mi apache tenga por defecto el UTF-8.
Ya puse en el HEADER de mi index (antes del tag <html>) el header: header ('Content-type: text/html; charset=utf-8');
En mi Sitio Web 1 (uno) tambien tengo UTF-8 tanto por encia del <html> como en el apache.

Que podrá ser ?

Saludos !


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Palabras Acentuadas problema al mostrar !
« Respuesta #1 en: 1 Noviembre 2014, 17:58 pm »

la base de datos (no solo la tabla) está también en colacion utf8?


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: Palabras Acentuadas problema al mostrar !
« Respuesta #2 en: 1 Noviembre 2014, 18:28 pm »

Buen dia.

Buena pregunta... revise ya y las tabla ALMACEN del Sitio Web 1 (uno - sistema almacen): latin1_swedish_ci   

Pero bueno se me hace tambien ilogico no se muestre bien el texto ya que tanto en el Sitio Web 1 como en el Sitio Web 2 uso el mismo metodo de imprimir:

# el sitio web 2 (ventas)
echo html_entity_decode( $variable, ENT_QUOTES );

# en el sitio web 1 (almacen)
$query= 'insert into TABLE(valor) values( \'". htmlentities($var, ENT_QUOTES). "\');';

Ademas en el Sitio Web 1 (almacen) es donde guardo la informacion en la BD.
Y en el Sitio web 2 (ventas) no guardo info en la BD, solo consulto con el API al Almacen.

Por otro lado en el Sitio Web 1 (almacen), no tengo este problema :S !

Saludos !
En línea

Graphixx


Desconectado Desconectado

Mensajes: 1.336


Full Stack Developer


Ver Perfil WWW
Re: Palabras Acentuadas problema al mostrar !
« Respuesta #3 en: 1 Noviembre 2014, 18:39 pm »

Prueba antes de insertar y antes de leer usar :
Código
  1. mysqli_set_charset($conexion,"utf8");

Por si no se entiende que es $conexion:
Código
  1. include_once("../mysqli.inc.php");
  2. $conexion=mysqli_connect ($cfg_servidor,$cfg_usuario,$cfg_password,$cfg_basephp1);
  3.  
« Última modificación: 1 Noviembre 2014, 18:41 pm por Graphixx » En línea

Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx Rōninnovation
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.605


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Palabras Acentuadas problema al mostrar !
« Respuesta #4 en: 1 Noviembre 2014, 18:58 pm »

Ojo, primer punto: htmlentities no evita inyecciones sql, segundo: htmlentities es una funciòn diseñada para la salida de datos no la entrada, si despues si alguien necesita hacer una busqueda desde el terminal como lo hará? tendria que codificar de memoria en htmlentities y tu base de datos va a perder integridad y va a aumentar su tamaño, la función htmlentities se usa solo cuando lo vas a mostrar como en un echo no cuando lo guardas.
En línea

Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: Palabras Acentuadas problema al mostrar !
« Respuesta #5 en: 1 Noviembre 2014, 19:01 pm »

Prueba antes de insertar y antes de leer usar :
Código
  1. mysqli_set_charset($conexion,"utf8");

Por si no se entiende que es $conexion:
Código
  1. include_once("../mysqli.inc.php");
  2. $conexion=mysqli_connect ($cfg_servidor,$cfg_usuario,$cfg_password,$cfg_basephp1);
  3.  

El problema creo yo no es donde inserto, sino en donde muestro.
Por que en el Sistema almacen (Sitio Web 1) no tengo problemas para mostrar caracteres acentuados, de hecho si EDITO mis productos puedo ver los acento perfecto, igual en la lista de productos.

El problema surge en la Pagina de ventas (Sitio Web 2) cuando consulto mediante el API y obtengo respuesta, imprimo el producto asi:

Código
  1. <?php
  2. $q= miapi( "productos", "all");
  3.  
  4. foreach( $q as $key=>$val )
  5.          echo html_entity_decode( $val->titulo, ENT_QUOTES );
  6. ?>

Los titulos de los productos salen con caracteres raros, por ejemplo la letra o acentuada, sale impresa asi: ó

Repito... si voy al Sistema de Almacen (sitio web 1) yo veo las letras acentuadas bien, y si edito los productos sigo viendo todo bien.

En abos sitios web tengo my.cnf para que por dfault sea utf8, en el index.php invoco el header para tipo de contenido utf8, tambien el meta tag de contenido utf8 y en el httpd.conf como default utf8.

Saludos !





Ojo, primer punto: htmlentities no evita inyecciones sql, segundo: htmlentities es una funciòn diseñada para la salida de datos no la entrada, si despues si alguien necesita hacer una busqueda desde el terminal como lo hará? tendria que codificar de memoria en htmlentities y tu base de datos va a perder integridad y va a aumentar su tamaño, la función htmlentities se usa solo cuando lo vas a mostrar como en un echo no cuando lo guardas.

Wow... me sorprende...

Si busco en google, todas partes recomiendan que al momento de insertar en una BDD pases las variables por htmlentites(), por consecuencia para mostrarlas debes pasar el decode.

Y para la busqueda, pues igual forma, pasarias la "muestra" de la busqueda a htmlentities, y despues la consulta en la BD.

En fin... creo yo no es mi problema....





Como maneja el flujo de datos mi API ?
Los clientes deben enviar la consulta en json encodeado (json_encode()).

El API (servidor) recibe el flujo json encodeado, lo decodifica (json_decode()), analiza la peticion y genera una respuesta en json encodeado (json_encode()) y lo envia al cliente.

En el cliente (el SDK) recibe la respuesta y la decodifica (json_decode()), esto resulta un OBJETO.

El objeto lo recorro e imprimo las partes que quiero.
Cada una de las partes (valores de las variables) fueron previamente pasadas por un htmlentities( $var, ENT_QUOTES) de lado del servidor.
Por consecuencia el cliente debe invertir esas variables pasandole un html_entity_decode() (dependiendo el caso).

Saludos !



MOD: NO HAGAS TRIPLE POST.
YO: sobres...
« Última modificación: 1 Noviembre 2014, 19:38 pm por Diabliyo » En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.605


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Palabras Acentuadas problema al mostrar !
« Respuesta #6 en: 2 Noviembre 2014, 02:18 am »

Citar
Si busco en google, todas partes recomiendan que al momento de insertar en una BDD pases las variables por htmlentites(), por consecuencia para mostrarlas debes pasar el decode.

El creador de PHP hizo esa función para ser utilizada en datos de salida, antiguamente todos ponian variables en las funciones include() y todos pensaban que estaba bien hasta que comenzaron a darse cuenta que existía algo llamado LFI y RFI, como también antiguamente la gente pensaba que un safe mode evitaba que te hackearan el website, si buscabas por internet podias encontrar todo tipo de profesionales y no profesionales diciendo lo mismo, hasta que el mismo creador de php tubo que decir oficialmente que un safe mode en on no prevenía ni mitigaba ni si quiera un poco un hackeo, es mas, por lo mismo decidió eliminar safe mode en las versiones nuevas de php.

En fin, una cosa es hacer lo que la mayoría de la gente irgnorante dice y otra muy distinta es seguir los estándares y guiarse por la documentación oficial del lenguaje o framework, etc.

Yo conozco alguien que alguna ves fue moderador de este foro y que ahora anda dando conferencias diciendo que es bueno guardar los textos ya codificados en htmlentities, gracias a ese tipo de conferencias cada día la gente sabe programar mas mal dejando en segundo plano el saber programar bien y seguro.

Dale un vistazo acá:
http://stackoverflow.com/questions/71328/what-are-the-best-practices-for-avoiding-xss-attacks-in-a-php-site#answer-71444

Tal como dice ese post, que pasa si despues necesitas procesar los datos vía json, via xml, etc? puedes producir problemas, en ves de eso se debe guardar tal cual es el valor y despues al desplegar o procsar usas el filtro adecuado el cual no siempre va a ser entidad html, puede ser por ejemplo escape de sql al guardar un dato de un lado a otro por ejemplo y el htmlentities no te va a salvar, es mas, puede corromper los datos de manera inesperada ya que htmlentities no filtra comillas simples a menos que le indiques lo contrario, no filtra signos de porcentaje, tampoco saltos de linea (ahi tienes un xss si lo procesas en javascript), el htmlentities tampoco te filtra el backslash, puedes inyectar secuencia de escapes en javascript y querys sql, y de que hablar de listas negras, esto no sirve y se ha hablado un montón en el foro,... etc.

Pero en fin, ese es otro tema.
« Última modificación: 2 Noviembre 2014, 02:31 am por WHK » En línea

JorgeEMX
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.615



Ver Perfil WWW
Re: Palabras Acentuadas problema al mostrar !
« Respuesta #7 en: 2 Noviembre 2014, 02:31 am »

Sobre el tema de acentos, revisa bien la codificación de tus archivos (en algún editor como Notepad++). Eso influye bastante y son cosas a considerar a parte de la codificación de la base de datos y de charset que ocupes en la definición de tu HTML. Eso si, para evitar problemas, estos 3 puntos deberán coincidir.
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Palabras Acentuadas problema al mostrar !
« Respuesta #8 en: 2 Noviembre 2014, 15:53 pm »

Parece un caso de doble encoding. Lo mas probable es que el navegador este interpretando otro encoding. ¿Por que?

Pusiste el ejemplo de ó

El equivalente en UTF-8 es: C3 B3 (Hex)

Tu navegador interpreta: ó

Fija como tu navegador se interpreta los bytes por separado, ahora si te vas a ver el encoding ISO-8859 o Windows-1252:

C3 = Ã
B3 = ³

http://en.wikipedia.org/wiki/Windows-1252#Code_page_layout

Ahora, el header que envias deberia asegurarte que el navegador se lea el documento en UTF-8 mas no que lo presente en UTF-8. ¿Que Doctype estas usando? Asegurate de establecer el charset correctamente:

Si estas usando html5:
Código
  1. <meta charset="utf-8">
En línea

R2100

Desconectado Desconectado

Mensajes: 9



Ver Perfil WWW
Re: Palabras Acentuadas problema al mostrar !
« Respuesta #9 en: 14 Noviembre 2014, 22:52 pm »

Estos tipos de problemas se suelen solucionar:
a)Cambiando la codificación entre utf8 y latin1 ... Content-type: text/html; charset=xxx');
b)Como dice JorgeEMX, cambiando la codificación del fichero php con notepad o similar
c)Códificando y descodificando (utf8_encode y utf8_decode)

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema: insertar palabras en un arreglo en C# [solucionado]
.NET (C#, VB.NET, ASP)
andiuri 7 18,682 Último mensaje 16 Mayo 2012, 21:37 pm
por J3RRYG3
Problemas con palabras acentuadas en FEED
PHP
Diabliyo 5 4,753 Último mensaje 23 Abril 2010, 08:28 am
por WHK
Problema al intentar leer un texto y decir el numero de palabras que hay repes.. « 1 2 »
.NET (C#, VB.NET, ASP)
z3nth10n 18 7,703 Último mensaje 14 Junio 2013, 22:37 pm
por Eleкtro
Como pasar a mayuscula vocales acentuadas ?
Programación C/C++
jesus++ 9 4,903 Último mensaje 16 Julio 2014, 21:38 pm
por Miseryk
Mostrar una fase donde este X palabras
Scripting
SlayerBur 6 3,502 Último mensaje 16 Abril 2021, 16:53 pm
por Danielㅤ
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines