Foros del Web » Programando para Internet » PHP »

duda con html_entity_decode!!! help!!

Estas en el tema de duda con html_entity_decode!!! help!! en el foro de PHP en Foros del Web. hola que tal tengo una gran duda con el uso de html_entity_decode, me leido manuales y demas ejemplos, pero no me aclaro si utilizo esto ...
  #1 (permalink)  
Antiguo 23/02/2010, 16:16
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 395
Antigüedad: 11 años, 10 meses
Puntos: 11
duda con html_entity_decode!!! help!!

hola que tal tengo una gran duda con el uso de html_entity_decode, me leido manuales y demas ejemplos, pero no me aclaro si utilizo esto en vez de htmlentities

pues yo tengo ciertas tablas de mi base cargada con texto con caracteres del tico é para los acentos... si utilizo htmlentities me muestra:

acción en vez de acción . ahora si uso html_entity_decode me muestra correctamente la palabra acentuada si utilizo

html_entity_decode($mivariable, ENT_NOQUOTES);

mi pregunta es si uso html_entity_decode ---> representa algun riesgo en la seguridad ???

saludos!
  #2 (permalink)  
Antiguo 23/02/2010, 16:27
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 16 años
Puntos: 89
Respuesta: duda con html_entity_decode!!! help!!

Puede significar un peligro.

Por ejemplo :

Tienes un sistema de comentarios, y un usuario malintencionado ingresa el siguiente código :

Código:
<script>alert('instrucción en javascript...');</script>
Si lo parseas con htmlentities, no habrá problemas a la hora de ingresarlo, pero a la hora de pasarlo por html_entity_decode, permitirá que ese código malicioso se ejecute.

Ahora si, lo que podrías hacer, antes de parsearlo con htmlentities, es utilizar strip_tags, así evitarías mostrar código malicioso.

No es una solución definitiva, pero funcionaría dependiendo del tipo de web que tengas.

Nos vemos.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #3 (permalink)  
Antiguo 23/02/2010, 16:56
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 395
Antigüedad: 11 años, 10 meses
Puntos: 11
Respuesta: duda con html_entity_decode!!! help!!

gracias por la respuesta, la verda que todos los testeos que realizado es como tu dices

yo lo que quiero es parcear con htmlentities pero que a la vez se muestren los benditos cantos....

alguna sugerencia....

saludos!
  #4 (permalink)  
Antiguo 23/02/2010, 17:19
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 16 años
Puntos: 89
Respuesta: duda con html_entity_decode!!! help!!

Uhmmmm...

Otra solución sería utilizar htmlspecialchars, el cual solo convierte los siguientes caracteres :

Código:
    *    '&' (ampersand) becomes '&amp;'
    * '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.
    * ''' (single quote) becomes ''' only when ENT_QUOTES is set.
    * '<' (less than) becomes '&lt;'
    * '>' (greater than) becomes '&gt;'
http://cl.php.net/manual/en/function...ecialchars.php

La ventaja que creo que tiene, es que puedes especificar el charset, en otras palabras, si tu texto es guardado como UTF-8, y el charset de tu web la has definido como UTF-8, no habría problema en la conversión de los caracteres.

Entonces, sería algo así, para explicarme mejor :

1.- El charset de tu web es UTF-8
2.- Ingresas los datos a la tabla de la siguiente forma : htmlspecialchars("<scrip>alert('código malicioso');</script>", ENT_NOQUOTES);

Luego sería solo mostrarlos, ya que el charset de tu web se encargará de traducir los caracteres sin el riesgo de ejecutar código malicioso.

Si me equivoco agradecería que me corrijan

PD : htmlspecialchars no afecta a los tildes.

Nos vemos.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #5 (permalink)  
Antiguo 23/02/2010, 20:49
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 395
Antigüedad: 11 años, 10 meses
Puntos: 11
Respuesta: duda con html_entity_decode!!! help!!

pues efectivamente la solucion seria cambiar a los caracteres eran UTF-8, mi web pero no me interesa eso ya que me traeria otros problemas con los cuales no quiero lidear.....

segun un manual que he leido la solucion seria esta :
(probado y funciona)

Código:
   1. Al crear la base de datos MySQL, asegúrate que los campos string y demás esten en utf8_spanish_ci y el cotejamiento de las tablas en
      utf_unicode_ci (más tarde en Operations > Collation de phpMyAdmin se puede cambiar)
   2. Pon en el <head> de todos los archivos HTML:

      <meta http-equiv="Content-type" content="text/html; charset=utf-8" />

   3. Y en los puramente PHP (que muestran XML, llamadas de AJAX, APIs…) pon el código:

      header("Content-Type: text/html;charset=utf-8");

   4. Al crear la conexión de PHP con MySQL, envía esta consulta justo tras la conexión:

      mysql_query("SET NAMES 'utf8'");

   5. Quita todos los htmlentities();
   6. Quita el DefaultCharset del Apache o modifícalo
pero yo prefiero no tener acentos a que tener un hueco en el traste

por quitar htmlentities seria suicio asegurado.....

asi que mi solucion es seguir usando ISO-8859-1

y asi utilizar mis propios filtros...

para esto lo he solucionado haciendome una pequeña funcion de este modo:

Código PHP:
<?php 
function malditosacentosdemerdas($globalvar)
    {
        
$globalvar htmlentities($globalvarENT_QUOTES'UTF-8');
        
$globalvar strtolower($globalvar);
        
$acentomerda = array ('/[\., ]+/' => '-','/&agrave;/' => 'a','/&egrave;/' => 'e',
            
'/&igrave;/' => 'i','/&ograve;/' => 'o','/&ugrave;/' => 'u','/&aacute;/' => 'a',
            
'/&eacute;/' => 'e','/&iacute;/' => 'i','/&oacute;/' => 'o','/&uacute;/' => 'u',
            
'/&acirc;/' => 'a','/&ecirc;/' => 'e'
            
etc etc et....agrgar todos los caracteres 
            a comvertir 
:-)    
 
        );
 
        
$globalvar preg_replace(array_keys($acentomerda ),array_values($acentomerda ),$globalvar);
        return 
$globalvar;
    }
?>
probado y funcionando.... si quieren usarla cambien $globalvar por la variable a la que deseen cambiar los caracteres !!

gracias por sus respuestas!!



PD: seguramente hay una forma mas sencilla de hacerla pero todo lo que encontre en la red no funciona y la mayor parte son copy paste con los mismos errores... como me canse de lidear con los acentos bautise mi funcion con ese nombre y luego de eso como arte de magia funciona!!!
  #6 (permalink)  
Antiguo 24/02/2010, 07:02
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 16 años
Puntos: 89
Respuesta: duda con html_entity_decode!!! help!!

Bueno , me alegra que hayas solucionado tu problema y compartieras la solución,

Nos vemos.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #7 (permalink)  
Antiguo 15/03/2010, 02:53
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 395
Antigüedad: 11 años, 10 meses
Puntos: 11
Respuesta: duda con html_entity_decode!!! help!!

solucion definitiva

bueno la funcion anterior no meha servido de mucho, pero he logrado hacer algo mas simple y que funciona mejor

para los que necesiten :

lo que hace es reemplazar los acentos luego de aplicarle htmlenties

Código PHP:
function reemplazaMe($text) {
utf8_encode($text);
$codigo= array("&aacute;","&eacute;","&iacute;","&oacute;","&uacute;","&uuml;","&ntilde;");
$cambiar = array("á","é","í","ó","ú","ü","ñ");
$text str_replace($codigo$cambiar$text);
$textstrtolower($text);
//$text = ereg_replace("[^A-Za-z0-9-]", "", $text);
return $text;

ejemplo de uso :

Código PHP:
$testeo"veh&iacute;culos";

echo 
reemplazaMe($testeo); 

Etiquetas: Ninguno
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:25.