Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: kakashi20 en 18 Septiembre 2009, 06:41 am



Título: ayuda caracteres
Publicado por: kakashi20 en 18 Septiembre 2009, 06:41 am
hola

hice esta funcion para validar a la hora de subir archivos que el nombre del archivo no contenga el caracter %, pero el if no me funciona, si  alguien me podria ayudar s elo agradeceria, tambien quisiera si en caso tal me funcionara el if, como detener el for apenas encuentre el caracter.


for ($i=0; $i<strlen($archivo);$i++){
      $cad=substr($archivo,$i,$i++);
      
      if($cad=="%"){
      echo"no se puede";

      }
}

gracias


Título: Re: ayuda caracteres
Publicado por: дٳŦ٭ en 18 Septiembre 2009, 07:20 am
Ponle un espacio a ver que sale.

Suerte


Título: Re: ayuda caracteres
Publicado por: kakashi20 en 18 Septiembre 2009, 15:14 pm
poniendole espacio en vez de % si me lo valida, pero caracteres raros como por ejemplo %, no me valida nada.


Título: Re: ayuda caracteres
Publicado por: naderST en 19 Septiembre 2009, 05:36 am
Código
  1. for ($i=0; $i<strlen($archivo);$i++){
  2. $cad=substr($archivo,$i,1);
  3.  
  4. if($cad == "%"){
  5. echo"no se puede";
  6. }
  7. }
  8.  

http://ve2.php.net/manual/en/function.substr.php (http://ve2.php.net/manual/en/function.substr.php)

También puedes usar strstr(), ya que con el bucle si el nombre del archivo tiene varios % imprimiría varias veces "no se puede", en cambio con strstr() lo imprimiría solo una vez sería algo así:

Código
  1. if(strstr($archivo, "%")){
  2. echo "no se puede";
  3. }
  4.  


Título: Re: ayuda caracteres
Publicado por: WHK en 20 Septiembre 2009, 01:16 am
Código
  1. <?php
  2. if(eregi('%', $archivo)
  3. die('error');
  4. ?>

Además no te funcionaba porque usas "%" y php lo toma como partede una variable al igual que usas printf, es como si pusieras \ en ves de \\ , hay muchas diferencias entre declarar un string entre comillas simples y dobles ya que con dobles puedes hacer escapes, escribir hexadecimal, unir variables, etc pero con comillas simple el string se mantiene tal como es.

No es lo mismo
Código
  1. <?php
  2. echo "% $test \n \x25 {$r}";
  3. ?>

a decir

Código
  1. <?php
  2. echo '% $test \n \x25 {$r}';
  3. ?>

Que pasa si haces un loop con cada carácter?, si es un carácter demasiado largo y muchas querys similares podría causar una denegación de servicio por memory exhaustion.